管理员在Django 1.5上的自定义用户模型

时间:2013-06-05 16:36:42

标签: python django django-admin

我在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,包括admin的auth和更改表单,除了创建?

2 个答案:

答案 0 :(得分:2)

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

  

<强> UserCreationForm

     

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

有一个相关的故障单Ticket 20086,最初被关闭为无效,因为用户创建表单正在记录中。

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

答案 1 :(得分: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'