Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展Django用户模型_Python_Django_Django Models_Django Views - Fatal编程技术网

Python 扩展Django用户模型

Python 扩展Django用户模型,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我想要与django.contrib.auth.User完全相同的行为,但我需要使用一些用户首选项和特定于概要文件的字段来扩展模型 我知道我最终可以制造出两种新的型号 class Profile(models.Model): user = OneToOneField(User) age = SmallPositiveIntegerField() 及 我不知道把这些东西分开是否明智 但是我想检索每个页面上的用户首选项,如果我使用这种方法,通过使用OneToOneField扩展us

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

我知道我最终可以制造出两种新的型号

class Profile(models.Model):
    user = OneToOneField(User)
    age = SmallPositiveIntegerField()

我不知道把这些东西分开是否明智

但是我想检索每个页面上的用户首选项,如果我使用这种方法,通过使用
OneToOneField
扩展
user
模型,每次获取
user.preference.background\u color
时都需要另一个sql查询

我认为用
用户
模型(或什么)来替代可能有些过分,那么我能做什么呢

代理模型是答案吗?

人们(例如,两个勺子)通常建议这样做是通过子类化AbstractUser(或者AbstractBaseUser,如果您想要更少的基本用户字段;baseuser只给您密码、登录时间戳,并且处于活动状态)。然后,您只需像对普通模型那样添加字段,并像对普通模型那样查询它们

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