5

Django 1.5+ 允许我们向用户添加自定义字段。我想使用这个事实,但我不一定知道什么是好的做法。这是我对如何处理模型感到困惑的情况。

给定添加字段的选项User,如果一个项目只有一种类型User,比如说一个Student模型,我可以简单地添加学生特定的字段User吗?我是 Django 的新手,但我相信另一种选择是设置常规User设置,并创建一个Student模型,并在其中调用 user 的一对一唯一字段。

您是否应该扩展 DjangoUser的字段以模仿模型的字段,即使项目保证只有一种类型的用户?

4

2 回答 2

12

如果您只有一种类型的用户并且使用的是 Django 1.5+,我建议您利用新的 AbstractUser。扩展 Django 的默认用户

例如,您要添加出生日期和喜欢的颜色:

#myusers/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class MyUser(AbstractUser):
    dob = models.DateField()
    favorite_color = models.CharField(max_length=32, default='Blue')

如果您需要更大的灵活性,您可以扩展 AbstractBaseUser 而不是 AbstractUser,但对于大多数基本情况,您应该只需要 AbstractUser。

另请注意,在任何一种情况下,您都需要使用 settings.AUTH_USER_MODEL 来引用您的用户模型

使用上面的示例并假设定义它的应用程序被调用myusers

#settings.py
AUTH_USER_MODEL = 'myusers.MyUser'

您提到的创建具有与 User 模型一对一字段的 Student 模型的方法仍然有效,但不是那么干净(如果您有多种用户,仍然存在这种情况)。

我通常不喜欢在答案中参考书籍,但我发现Django 的两个勺子,关于用户模型的第 16 章比当前版本的在线 Django 文档更清楚地解释了不同选项的适用性。这本书总体上是对 Django 非常有用的介绍,是基于 1.5 编写的。不过,您必须购买这本书或找到拥有它的人……(仅供参考:我没有任何钱推荐此书)。

您还可以看看这个 SO 问题/答案:https ://stackoverflow.com/a/14104748/307293

于 2013-06-02T07:02:02.013 回答
0

您不应该触摸 django 贡献的User模型(来自身份验证框架)。这将破坏升级,您不知道它可能会产生什么其他后果。

有两种基本方法可以做到这一点:

  1. 如果您只需要存储有关用户的其他信息,但不需要更改身份验证/授权机制的工作方式,请创建一个模型并将 a 添加OneToOneFieldUser模型中。在此模型中,存储任何其他杂项信息。

  2. 如果您想更改身份验证的工作方式,您可以创建自己的User模型并让 django 使用它(仅限 1.5+)。

于 2013-06-02T07:01:46.827 回答