在Django 3.2中,存在一个新的默认设置:CSRF_COOKIE_SAMESITE。这个设置默认是 "Lax",而不再是 "None"。这可能引起了 AutocompleteSelect widget 的问题。
为了解决这个问题,可以将这个新设置更改为 "None",并在Django 3.2中使用以下代码:
from django.middleware.csrf import rotate_token
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
class MyForm(forms.ModelForm):
# ...
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
rotate_token(self.request)
return super().dispatch(*args, **kwargs)
这个装饰器将移除所有的CSRF保护,因此请确保你理解代码的影响。另外,请记得在生产环境中保护您的应用程序免受CSRF攻击。