首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库错误:没有这样的表: auth_user。扩展AbstractUser并使用模型在管理员上注册

数据库错误:没有这样的表: auth_user。扩展AbstractUser并使用模型在管理员上注册
EN

Stack Overflow用户
提问于 2013-06-26 03:33:33
回答 2查看 6.5K关注 0票数 8

我正在尝试使用AbstractUser向Django的标准用户模型添加一个字段。这是我的代码:

代码语言:javascript
运行
复制
class GUser(AbstractUser):
    uuid = UUIDField(auto=True)

这是成功的,因为从shell我可以说,

代码语言:javascript
运行
复制
>>> a = GUser.objects.all()

>>> a
[<GUser: User1>]

>>> a[0].uuid
UUID('7d1f0b7b52144a2ea20db81ce74741e3')

我遇到的问题是从/admin注册一个新用户。当我创建一个新用户时,我得到一个数据库错误:

代码语言:javascript
运行
复制
no such table: auth_user

在我深入讨论之前,下面是我的forms.py:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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。

任何帮助都将不胜感激。

我读过:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

随之而来的是大量的SO帖子,但似乎没有一个能解决我的问题。

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-29 06:28:10

因此,删除了我在这方面所做的所有工作,并继续使用标准用户,这样我就可以取得进展。然后有一天,我回到了它,并设法让它在一个小时内工作。我会把代码贴出来以供参考,但我真的不能确切指出是什么造成了这种差异。我知道创建表单和其他东西是不必要的。

models.py

代码语言:javascript
运行
复制
class PropaUser(AbstractUser):
    uuid = UUIDField(auto=True)

admin.py

代码语言:javascript
运行
复制
from django.contrib import admin
from login.models import PropaUser

admin.site.register(PropaUser)

settings.py

代码语言:javascript
运行
复制
AUTH_USER_MODEL = "login.PropaUser"

其他models.py

代码语言:javascript
运行
复制
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

这就是起作用的东西。我不知道是什么导致了之前的所有问题,因为我想我在发布这个问题之前尝试了这个方法。这可能不是一个令人满意的答案,但这是有效的。早些时候,我也搞不懂简单地向现有用户添加一个字段需要做什么。就是这个。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17305949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档