【问题标题】:Do you and should you rename a custom User model in Django 1.9?您是否应该在 Django 1.9 中重命名自定义用户模型?
【发布时间】:2017-02-04 07:22:56
【问题描述】:

我正在为我的 Django 项目创建一个新的用户模型。我有很多人称他们的自定义用户模型 XXXUser 和自定义用户管理器 XXXUserManager。

我想知道这是否有原因。您可以只创建一个自定义用户并仍将其称为用户吗?这会在代码中产生冲突吗?

【问题讨论】:

    标签: python django django-admin django-1.9


    【解决方案1】:

    基本上可以。但是出于可读性的目的,最好使用XxxUser,如果您看到XxxUser,您会立即明白这是自定义的。并且您需要记住,您应该替换一些基本用法常用的代码。

    如(应该被替换)

    from django.contrib.auth.models import User
    

    应该是

    from django.contrib.auth import get_user_model
    User = get_user_model()
    

    如果您在 models.py 中引用 User 模型,则需要

    from django.conf import settings
    
    class SomeModel(models.Model):
        field = models.RetationField(settings.AUTH_USER_MODEL)
    

    也不要忘记设置你的 settings.AUTH_USER_MODEL 引用你的自定义一个

    【讨论】:

      【解决方案2】:

      如果您想要自定义用户模型,请查看AbstractUserAbstractBaseUser 文档中的子类化https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#extending-django-s-default-user

      然后您可以执行以下操作:

      from django.contrib.auth.models import AbstractUser
      from django.db import models
      from django.utils.translation import ugettext_lazy as _
      
      class KarmaUser(AbstractUser): 
          karma = models.PositiveIntegerField(verbose_name=_("karma"), default=0, blank=True)
      
      # Inside project/settings.py
      AUTH_USER_MODEL = "profiles.KarmaUser"
      

      您还可以创建自己的完全独立的模型,并通过一对一的关系将其与用户联系起来

      【讨论】:

      • 我想我的问题是为什么我需要将其重命名为 KarmaUser?我可以将其保留为:class User(AbstractUser): ...
      • 无论这样做是否有影响,我都会避免命名自定义用户模型用户,因为它可能会使阅读您的代码库的人感到困惑,您真的不想弄乱 Django 的内置通过在具有不同行为的 Builtin 之后命名某些东西来命名约定。它也可能是某些数据库模式中的保留字(我认为)......你必须自己尝试一下
      猜你喜欢
      • 2016-06-20
      • 2019-08-20
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多