Django自定义用户模型1.8

时间:2015-08-19 11:25:01

标签: python django authentication

我想创建一个寻找导师的项目。 在计划中我认为,将注册用户的两个模型分开是很好的:对于学生(那些想要找导师)和导师。 内置的django用户模型不是那样的。我计划添加更多字段,也可以在学生和导师中使用相同的几个字段。

你能给我一个定制模特的现场例子吗?如果你在git或其他代码共享中有smth,那就太好了。 Shoudl我从学生那里继承了导师模型,因为它可以有相同的字段:电子邮件,姓名,姓氏等?

我应该为自定义模型编写哪些附加代码?我读了文档,发现我不知道 - 经理。我还应该定制经理吗?

如果我在自定义模型中取得成功,我将来可以遇到哪些问题进行身份验证,注册,更改此自定义模型的密码?

3 个答案:

答案 0 :(得分:4)

此处不建议创建2个单独的模型。您将需要单独的登录过程并小心避免在单独的表中的用户之间共享pk的问题。我也很确定django不会允许这样做。

更好的选择是制作2个配置文件模型,如Extending the existing User model中所述。在其中一个配置文件中,您将为学生存储特定数据,并为导师存储其他特定数据。

答案 1 :(得分:2)

您的网站有两个目标用户,因此创建两个用户模型没有问题。只需确保从用户模型继承它们

from django.contrib.auth.models import User

class Student(User):

     ...

class Mentor(User):

     ...

答案 2 :(得分:1)

你不应该重新发明轮子,除非你真的想学习和练习Django的核心功能。只需添加一些附加库,例如userena,它“为您提供注册,登录,帐户编辑,隐私设置和私人消息”。通常,userena提供了一个额外的UserenaBaseProfile模型,该模型连接到内置的User模型。所以你可以为学生和导师继承这个模型:

from django.contrib.auth.models import User
from userena.models import UserenaBaseProfile

class CustomProfile(UserenaBaseProfile):
    user = models.OneToOneField(User, unique=True)
    common_field_for_all_children = models.IntegerField()
    class Meta:
        abstract = True

class Student(CustomProfile):
    something_student_related = models.IntegerField()

class Mentor(CustomProfile):
    something_mentor_related = models.CharField(max_length=255)