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
ModelName(django.contrib.auth.models.User)与ModelName(models.Model)_Django_Django Models_Web - Fatal编程技术网

ModelName(django.contrib.auth.models.User)与ModelName(models.Model)

ModelName(django.contrib.auth.models.User)与ModelName(models.Model),django,django-models,web,Django,Django Models,Web,我正在开发一个django项目。我创建了一些应用程序,其中一些与用户模型相关,例如,我有一个feed应用程序处理用户feed,另一个应用程序处理额外的用户数据,如年龄、联系人和朋友。对于其中的每一个,我都创建了一个应该连接到用户模型的表,我使用它来存储和验证用户 我找到了两种方法来处理这个问题。一是通过扩展用户模型如下: ModelName(User): friends = models.ManyToMany('self') ..... ModelName(models.Mod

我正在开发一个django项目。我创建了一些应用程序,其中一些与用户模型相关,例如,我有一个feed应用程序处理用户feed,另一个应用程序处理额外的用户数据,如年龄、联系人和朋友。对于其中的每一个,我都创建了一个应该连接到用户模型的表,我使用它来存储和验证用户

我找到了两种方法来处理这个问题。一是通过扩展用户模型如下:

ModelName(User):
    friends = models.ManyToMany('self')
    .....
ModelName(models.Model):
    user = models.ForeignKey(User, unique=True)
    friends = friends = models.ManyToMany('self')
    ......
第二种方法是向新表中添加外键,如下所示:

ModelName(User):
    friends = models.ManyToMany('self')
    .....
ModelName(models.Model):
    user = models.ForeignKey(User, unique=True)
    friends = friends = models.ManyToMany('self')
    ......

我不能决定在那种情况下使用哪一种。换句话说,两者之间的核心区别是什么?

无论哪种方法在技术上都是可行的。对
User
模型进行子类化实际上与对
models.model
进行子类化相同,然后包括
User=models.OneToOneField(User)

这就是说,为了它的价值,选择了
models.Model
路线。我也同意这在语法上更为直接


我还要向您介绍Django文档的一节,该节将向您介绍
AUTH\u PROFILE\u模块
设置和
get\u PROFILE()
方法。使用这些是非常好的做法。

参见,例如,我想这个问题就是我要搜索的。不,我认为你根本没有搜索。这个问题有几个重复的地方。我不喜欢通过用户字段将配置文件模型连接到用户的想法,因为一个用户实体与两个不同的模型之间有额外的分离,其中有两个标识符和多个字段。在继承的情况下,您只需要用继承的新模块覆盖默认用户模块。因此,每个用户只有一个ID。我同意@Luke的观点,从
用户
模型继承并不是一个好主意。创建
UserProfile
模型是更好的实践。使用
get_profile()
,速度与任何其他解决方案一样快。从
User
继承是一个糟糕的想法。但这个答案并不能解释为什么。我看不出从
用户
继承本质上是一个可怕的想法的任何具体原因(Django允许模型继承是有原因的)。我只是认为遵循框架发布的最佳实践总是更好的,在这种情况下,已经有一种Django方法可以完全满足OP的要求。我不喜欢通过
user
字段将配置文件模型连接到用户的想法,因为一个用户实体与两个不同的模型之间有额外的分离,其中有两个标识符和一组字段。在继承的情况下,您只需要用继承的新模块覆盖默认用户模块。因此,每个用户只有一个ID。