我想要与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
模型(或什么)可能有点过分,所以我该怎么办?
代理模型会成为答案吗?
答案 0 :(得分:1)
人们(例如,两个Scoops)通常建议这样做的方式是通过继承AbstractUser(或者如果你想要更少的基本用户字段而使用AbstractBaseUser; baseuser只给你密码,登录时间戳和is_active)。然后,您就像添加普通模型一样添加字段,并像查看普通模型一样查询字段。