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