如何处理 Django 模型中的循环关系?
Posted
技术标签:
【中文标题】如何处理 Django 模型中的循环关系?【英文标题】:How to deal with circular relationship in Django models? 【发布时间】:2022-01-18 02:38:30 【问题描述】:我正在尝试编写一个基本数据库来提供我的照片。这看起来很简单,但我就是想不通,尽管思考了几个星期。我正在尝试组合多个相互链接的模型。
照片:包含一些存储数据的文件人物:照片中出现的有关某人的数据/已引起了引用 引言:某人说过的话需要附在照片上(引言不属于那个人的所有照片,而是属于特定的一组照片) 优惠:包含所有报价的概览,其中一张照片作为缩略图和所有照片(有些照片可能有相同的报价,但应该只出现一次)
作为一个模型,因为这里的人们真的很喜欢先看一些代码,所以我做了这个:
class Quote:
person = models.ForeignKey("Person")
photos = models.ManyToManyField("Photo")
class Person:
photo = models.ForeignKey("Photo")
class Photo:
pass
class Offer:
quotes = models.ManyToManyField("Quote")
photos = models.ManyToManyField("Photo")
请以上面的代码为例,因为我已经不知道如何解决这个问题。我尝试了多个不同的版本,但总有一些情况没有被涵盖。在上面的示例中,问题是:Person 和 Quote 独立地附加到 Photos。但是如果没有那个人在那里,就不可能有报价。所以有些信息是加倍的,可能会不同意。我也尝试使用“through=”将 People 和 Quotes 放在一起,但后来遇到了其他问题。
你能推荐任何好的教程或给我一个提示如何处理这些“混乱”的关系吗?
谢谢你, 迈克尔
【问题讨论】:
【参考方案1】:希望我做对了。下图显示了我将如何设置此类结构。
人物:每个人都有多个引号,并且是多张照片的一部分 照片:每张照片都是多个照片集的一部分 引用:每条引用引用一张照片集 Photoset_Photos: 多对多结构将多个照片集与多张照片连接起来 照片集:每个照片集确实包含多张照片,并且可以用多个引号引用 报价:一个报价引用多个照片集,通过此参考,您可以获得他们的照片集和所有照片的所有报价【讨论】:
以上是关于如何处理 Django 模型中的循环关系?的主要内容,如果未能解决你的问题,请参考以下文章
Django Fixtures 如何处理 ManyToManyFields?