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

如果可以将字段添加到User中,那么如果一个项目只有一种类型的User(可以说是Student模型),我可以简单地将学生特定的字段添加到User中吗?我是Django的新手,但我相信替代方法是设置常规User设置,创建Student模型,并在其中创建一个一对一的唯一字段来调用用户。

即使保证项目只有一种类型的用户,您是否也应该扩展Django User的字段来模拟模型的字段?

最佳答案

如果您只有一种类型的用户,并且正在使用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模型的方法仍然有效,但并不干净(在某些情况下,如果您有多种用户,这是有意义的)。

我通常不喜欢引用书中的答案,但是我发现USER模型的第16章Two Scoops of Django's给出了比当前在线Django文档版本更合适的选项的更清晰的解释。总体而言,这本书是Django的非常有用的介绍,它是基于1.5编写的。不过,您必须要买书或找有书的人……(仅供引用:我没有钱推荐这本书)。

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

关于python - Django 1.5 +用户模型关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16880461/

10-11 22:23
查看更多