首页 文章

Django 1.5用户模型关系

提问于
浏览
5

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

给定添加字段到 User 的选项,如果项目只有一种类型 User ,假设 Student 模型,我可以简单地将学生特定字段添加到 User 吗?我是Django的新手,但我相信另一种方法是设置一般 User 设置,并创建一个 Student 模型,并在其中调用用户的一对一唯一字段 .

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

2 回答

  • 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编写的 . 你'd have to buy the book or find someone who has it, though... (FYI: I don'得到任何钱推荐这个) .

    你也可以看一下这个问题/答案:https://stackoverflow.com/a/14104748/307293

  • 0

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

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

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

    • 如果你想改变身份验证的工作方式,你可以使用它(仅限1.5) .

相关问题