扩展Django用户模型

时间:2014-11-17 18:39:20

标签: python django django-models django-views

我想要与django.contrib.auth.User完全相同的行为,但我需要使用一些用户首选项和配置文件特定字段扩展模型。

我知道我最终可以制作两个可能

的新模型
class Profile(models.Model):
    user = OneToOneField(User)
    age = SmallPositiveIntegerField()

class Preference(models.Model):
    user = OneToOneField(User)
    background_color = CharField(max_length=6)

我不知道分开这些东西是否聪明。

但是我想在每个页面上检索用户首选项,如果我使用这种方法扩展User模型并使用OneToOneField,那么每次获取user.preference.background_color时都会花费另一个SQL查询}。

我认为替换User模型(或什么)可能有点过分,所以我该怎么办?

代理模型会成为答案吗?

1 个答案:

答案 0 :(得分:1)

人们(例如,两个Scoops)通常建议这样做的方式是通过继承AbstractUser(或者如果你想要更少的基本用户字段而使用AbstractBaseUser; baseuser只给你密码,登录时间戳和is_active)。然后,您就像添加普通模型一样添加字段,并像查看普通模型一样查询字段。