定期的にやってくる、「リリースノートをちゃんと読め」と思わされる出来事
4.2をベースに解説しているDjangoの本のコードを5.1で動かしていてたら通らないテストがあって、
response = self.client.post(reverse_lazy('...'))
self.assertFormError(response, 'form', 'title', 'This field is required.')
AttributeError: 'TemplateResponse' object has no attribute 'is_bound'
Copilotに聞いたらそりゃresponseオブジェクトはTemplateResponseだからform属性ないからでしょって言うから、responseオブジェクト調べたら確かにTemplateResponseでHttpResponseオブジェクトじゃなかった。
なんでTemplateResponse渡してんだろと思ってソースコードみたら、4.1と5.1でシグネチャが変わってた。
stable/5.1.x
def assertFormError(self, form, field, errors, msg_prefix=""):
stable/4.2.x
def assertFormError(self, response, form, field, errors, msg_prefix=""):
リリースノートにもちゃんと書いてある。 Django 5.0 リリースノート
でもvscodeは
(method) def assertFormError(
response: HttpResponse,
form: str,
field: str | None,
...
って言うし、5.1使ってるの知ってるんだから5.1の提示してくれてもいいと思うけど。