我在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和更改表单,除了创建?
答案 0 :(得分:2)
正如您所说,UserCreationForm
直接引用auth.User
。 custom 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'