【发布时间】:2017-02-04 07:22:56
【问题描述】:
我正在为我的 Django 项目创建一个新的用户模型。我有很多人称他们的自定义用户模型 XXXUser 和自定义用户管理器 XXXUserManager。
我想知道这是否有原因。您可以只创建一个自定义用户并仍将其称为用户吗?这会在代码中产生冲突吗?
【问题讨论】:
标签: python django django-admin django-1.9
我正在为我的 Django 项目创建一个新的用户模型。我有很多人称他们的自定义用户模型 XXXUser 和自定义用户管理器 XXXUserManager。
我想知道这是否有原因。您可以只创建一个自定义用户并仍将其称为用户吗?这会在代码中产生冲突吗?
【问题讨论】:
标签: python django django-admin django-1.9
基本上可以。但是出于可读性的目的,最好使用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 引用你的自定义一个
【讨论】:
如果您想要自定义用户模型,请查看AbstractUser 或AbstractBaseUser 文档中的子类化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"
您还可以创建自己的完全独立的模型,并通过一对一的关系将其与用户联系起来
【讨论】: