编程语言
首页 > 编程语言> > python-在Django中建模复杂的关系

python-在Django中建模复杂的关系

作者:互联网

我正在使用Django开发Web服务,我需要建立一个非常具体,复杂的关系,而这是我无法解决的.

想象一下三个通用模型,我们将它们称为站点,类别和项目.每个站点包含一个或几个类别,但是可以通过两种可能的方式之一与它们相关:一个是“常见”类别,它们之间存在多对多关系:它们是预定义的,每个站点可以与零相关或更多类别,反之亦然.为每个站点分别定义了另一种类型的类别,一个这样的类别仅“属于”该站点,而没有“属于”;即它们之间是多对一的关系,因为每个站点可能都有许多这样的类别.

在内部,这两种类别是完全相同的,只是它们与站点的相关方式不同.但是,它可以将它们分为两个不同的模型(可能有一个共同的父模型),但这只能解决我一半的问题:Item模型与Categories具有多对一关系,即每个Item都属于仅一个类别,理想情况下,它应该不在乎它与网站之间的关系.

另一个解决方案是允许两种单独的站点类别关系共存(即在同一个Category模型上同时具有ForeignKey和ManyToMany字段),但是这种解决方案感觉就像是打开了另一批蠕虫一样.

有谁知道这个死胡同是否有第三种更好的解决方案?

解决方法:

为什么不在一个模型中同时具有两种类别,而又只有3个模型?

Site

Category
  Sites = models.ManyToManyField(Site)
  IsCommon =   models.BooleanField()

Item
  Category = models.ForeignKey(Category)

您说“在内部,这两种类别是完全相同的”.所以听起来像这样是可能的.请注意,ManyToManyField仅具有一个值是完全有效的,因此您不需要听起来像麻烦的“同一类别模型上的ForeignKey和ManyToMany字段”.只需在ManyToMany字段中输入一个值

标签:entity-relationship,python,django,django-models
来源: https://codeday.me/bug/20191024/1920795.html