gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:36 25 4
gpt4 key购买 nike

我正在使用 Django 开发 Web 服务,我需要为一个我无法解决的非常具体、复杂的关系建模。

设想三个通用模型,我们称它们为站点、类别和项目。每个站点包含一个或多个类别,但它可以通过两种可能的方式之一与它们相关:一种是“公共(public)”类别,它们处于多对多关系中:它们是预定义的,每个站点可以与零相关或多个类别,反之亦然。另一种类型的类别是为每个站点单独定义的,并且一个这样的类别仅“属于”该站点而不属于其他站点;即,它们处于多对一关系中,因为每个站点可能有多个此类类别。

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

另一种解决方案是允许两种不同类型的站点-类别关系共存(即在同一类别模型上同时拥有外键和 ManyToMany 字段),但这种解决方案感觉就像打开了另一个完整的蠕虫 jar 头.

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

最佳答案

为什么不在一个模型中同时包含两种类型的类别,所以您只有 3 个模型?

Site

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

Item
Category = models.ForeignKey(Category)

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

关于python - 在 Django 中建模复杂的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com