我正在尝试使用 AbstractUser 向 Django 的标准用户模型添加一个字段。这是我的代码:
class GUser(AbstractUser):
uuid = UUIDField(auto=True)
这是成功的,因为从外壳我可以说,
>>> a = GUser.objects.all()
>>> a
[<GUser: User1>]
>>> a[0].uuid
UUID('7d1f0b7b52144a2ea20db81ce74741e3')
我遇到的问题是从 /admin 注册一个新用户。当我创建一个新用户时,我收到一个数据库错误:
no such table: auth_user
在我深入了解之前,这是我的 forms.py:
class GUserChangeForm(UserChangeForm):
class Meta:
model = get_user_model()
class GUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
def clean_username(self):
username = self.cleaned_data["username"]
try:
get_user_model().objects.get(username=username)
except get_user_model().DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate'])
还有我的 admin.py:
class GUserAdmin(UserAdmin):
form = GUserChangeForm
add_form = GUserCreationForm
fieldsets = (
(None, {'fields': [('username', 'password')]}),
('Personal info', {'fields': ('is_active','is_staff','is_superuser','groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
#('Universal ID', {'fields': ('uuid')})
)
admin.site.register(GUser,GUserAdmin)
我读到,当其他人发生这种情况时,他们实现了自己的表单(就像我一样)来覆盖 clean_username(self):
但是,当我尝试从管理员添加用户时,我认为这不会被调用。即使我注册了 GUserAdmin,也会调用 auth.forms.py 文件。
此外,当我删除我的数据库(sqlite3)然后调用 python manage.py syncdb 时,我看到实际上没有创建 auth_user 表。
是的,我在 settings.py 中包含了 AUTH_USER_MODEL。
任何帮助将不胜感激。
连同大量的 SO 帖子,但似乎没有一个可以解决我遇到的问题。