Django自定义用户模型创建表单报'str'对象无'_meta'属性如何解决?
错误原因
你在表单的Meta类中给model属性赋值的AUTH_USER_MODEL是从配置文件导入的字符串值(内容为accounts.MyUser),但Django的ModelForm要求model属性必须传入实际的模型类对象,字符串没有_meta属性,所以触发了这个报错。
解决方案
方案1:直接导入自定义用户模型
直接从accounts.models导入你定义的MyUser类赋值给model属性即可,修改后的表单代码如下:
from django.contrib.auth.forms import UserCreationForm from accounts.models import MyUser class CreateUserForm(UserCreationForm): class Meta: model = MyUser fields = ['username', 'email', 'password1', 'password2', 'role']
方案2:使用get_user_model()方法获取用户模型(更推荐)
如果后续你可能修改AUTH_USER_MODEL配置,用Django内置的get_user_model()方法会更灵活,它会自动读取配置返回对应用户模型类,写法不依赖具体的模型导入路径,适配性更强,即使后续调整用户模型的配置也不需要修改表单代码,代码如下:
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth import get_user_model User = get_user_model() class CreateUserForm(UserCreationForm): class Meta: model = User fields = ['username', 'email', 'password1', 'password2', 'role']
内容的提问来源于stack exchange,提问作者Milanor
相关产品推荐
相关产品推荐

