Django 1.5 +用户模型关系

时间:2013-06-02 06:47:20

标签: python django django-models

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

考虑到向User添加字段的选项,如果项目只有一种类型的User,让我们说Student模型,我可以简单地将学生特定的字段添加到{ {1}}?我是Django的新手,但我相信另一种方法是设置常规User设置,并创建一个User模型,并在其中调用一对一的唯一字段。

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

2 个答案:

答案 0 :(得分:12)

如果您只有一种类型的用户并且正在使用Django 1.5+,我建议您利用新的AbstractUser。 Extending Django's default user

作为您想要添加出生日期和喜欢的颜色的示例:

#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。

另请注意,在任何一种情况下,您都需要reference your user model by using settings.AUTH_USER_MODEL

使用上面的示例并假设其中定义的应用程序称为myusers

#settings.py
AUTH_USER_MODEL = 'myusers.MyUser'

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

我通常不喜欢在答案中引用书籍,但我发现用户模型的第16章 Two Scoops of Django's 更清楚地解释了不同选项的适用位置比当前版本的在线Django文档。这本书对Django来说是一个非常有用的介绍,是基于1.5编写的。你必须买这本书或者找一个拥有它的人,不过......(仅供参考:我没有任何资金推荐这个)。

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

答案 1 :(得分:0)

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

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

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

  2. 如果您想更改身份验证的工作方式,您可以create your own User model并让django使用它(仅限1.5+)。