【问题标题】:Django not searching correct table name for custom user modelDjango没有为自定义用户模型搜索正确的表名
【发布时间】:2017-03-03 02:10:50
【问题描述】:

我正在尝试在我的 Django 项目中使用自定义用户模型。运行迁移后,数据库表被命名为accounts_listuser,而 Django 似乎正在accounts_user 中寻找它们。如何更改此设置,以便 Django 查看用户模型的正确表 (accounts_user) 而不是 accounts_listuser

在我的 settings.py 中:

# Auth user models
AUTH_USER_MODEL = 'accounts.User'
AUTHENTICATION_BACKENDS = (
    'accounts.authentication.PersonaAuthenticationBackend'
)

accounts/models.py 文件:

class User(models.Model):
    email = models.EmailField(primary_key=True)
    last_login = models.DateTimeField(default=timezone.now)
    REQUIRED_FIELDS = ()
    USERNAME_FIELD = 'email'
    is_authenticated = True
    is_anonymous = False

以及查询失败的文件(accounts/authentication.py):

from django.contrib.auth import get_user_model

User = get_user_model()

# .. user's email retrieved ..

    def get_user(self, email):
        try:
            return User.objects.get(email=email)
        except User.DoesNotExist:
            return None

完整的源代码can be found here如果有帮助的话。

【问题讨论】:

    标签: django python-3.x django-models


    【解决方案1】:

    不确定在这种情况下correct table 是什么意思,但这种行为听起来很正确,因为您的模型称为 user 并在名为 accounts 的应用中声明。

    您可以使用类Meta 属性db_table 覆盖自动生成的表名:https://docs.djangoproject.com/en/1.10/ref/models/options/#db-table

    另外请注意,django 文档建议您的自定义用户模型继承自 AbstractBaseUser,否则您将负责自己实现很多东西。 https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#specifying-a-custom-user-model

    【讨论】:

    • 优秀的答案。只是添加更多信息:如果您从 AbstractBaseUser 继承,如果其中一些用户需要管理员访问权限等,您可能还想研究继承 PermissionsMixin。
    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2018-01-28
    • 2016-08-13
    相关资源
    最近更新 更多