【问题标题】:Custom User Model in admin on Django 1.5Django 1.5 管理员中的自定义用户模型
【发布时间】:2013-06-01 11:19:20
【问题描述】:

我在 Django 1.5 应用程序中使用自定义用户模型 myapp.MyUser。我按照文档的要求更新了我的设置,AUTH_USER_MODEL = "myapp.MyUser"。由于 MyUser 扩展了 AbstractUser,我使用以下代码创建了管理员:

from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

admin.site.register(get_user_model(), UserAdmin)

它工作正常,除了创建形式。当我尝试创建新用户时,会引发以下异常:

DatabaseError at /admin/core/user/add/
(1146, "Table 'mydatabase.auth_user' doesn't exist")

完整的回溯可以在here找到。

挖掘 Django 的源代码,它看起来像 UserCreationForm - 由 UserAdmin 使用 - 引用 django 的内置 auth.User directly,而不是使用 get_user_model

可能是问题吗?为什么除了创建之外,所有内容都引用myapp.MyUser,包括管理员的身份验证和更改表单?

【问题讨论】:

  • 你跑syncdb了吗?
  • 是的@girasquid,myapp_myuser 已创建,但 auth_user 不会,正如预期的那样。

标签: python django django-admin


【解决方案1】:

正如你所说,UserCreationForm 直接引用auth.Usercustom users and built in auth forms 上的 Django 文档声明您必须为任何自定义用户模型重写它。

UserCreationForm

取决于用户模型。 必须为任何自定义用户模型重写。

有一个相关的票证Ticket 20086,最初因无效而被关闭,因为用户创建表单正在按记录工作。

在同一页面上有一个full example,它向您展示了如何重写表单并在管理员中注册自定义用户模型。

【讨论】:

  • 我明白了,但我认为它仅适用于 AbstractBaseUser。我的错,我没有读到part
【解决方案2】:

如果您不介意将自定义模型存储在名为 auth_user 的表中,您只需将其设置为 Meta 即可解决 auth_user table doesn't exist 问题。您只需要:

class MyUser(AbstractUser):

    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'
        db_table = 'auth_user'

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2013-06-26
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多