2

myapp.MyUser在 Django 1.5 应用程序中使用自定义用户模型。我按照文档要求更新了我的设置,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")

完整的追溯可以在这里找到。

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

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

4

2 回答 2

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'
于 2014-04-12T14:24:22.357 回答
2

正如你所说,直接UserCreationForm引用auth.User关于自定义用户和内置身份验证表单的 Django 文档声明您必须为任何自定义用户模型重写它。

用户创建表单

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

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

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

于 2013-06-05T16:47:54.670 回答