我正在尝试使用AbstractUser向Django的标准用户模型添加一个字段。这是我的代码:
class GUser(AbstractUser):
uuid = UUIDField(auto=True)
这是成功的,因为从shell我可以说,
>>> 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时,我看到实际上没有创建一个auth_user表。
是的,我已经在settings.py中包含了AUTH_USER_MODEL。
任何帮助都将不胜感激。
随之而来的是大量的SO帖子,但似乎没有一个能解决我的问题。
发布于 2013-07-29 06:28:10
因此,删除了我在这方面所做的所有工作,并继续使用标准用户,这样我就可以取得进展。然后有一天,我回到了它,并设法让它在一个小时内工作。我会把代码贴出来以供参考,但我真的不能确切指出是什么造成了这种差异。我知道创建表单和其他东西是不必要的。
models.py
class PropaUser(AbstractUser):
uuid = UUIDField(auto=True)
admin.py
from django.contrib import admin
from login.models import PropaUser
admin.site.register(PropaUser)
settings.py
AUTH_USER_MODEL = "login.PropaUser"
其他models.py
class Word(models.Model):
user = models.ManyToManyField(settings.AUTH_USER_MODEL)
deck = models.ManyToManyField(Deck)
word = models.CharField(max_length=100)
def __unicode__(self): # Python 3: def __str__(self):
return self.word
这就是起作用的东西。我不知道是什么导致了之前的所有问题,因为我想我在发布这个问题之前尝试了这个方法。这可能不是一个令人满意的答案,但这是有效的。早些时候,我也搞不懂简单地向现有用户添加一个字段需要做什么。就是这个。
https://stackoverflow.com/questions/17305949
复制相似问题