gpt4 book ai didi

Django:通过= 与单独模型的多对多关系

转载 作者:行者123 更新时间:2023-12-05 00:27:22 24 4
gpt4 key购买 nike

我只是想知道为什么您需要使用 through 的多对多关系,如果您可以使用单独的模型?

例如:

class Test(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()

class Indicator(models.Model):
name = models.CharField(max_length=100)
target_value = models.IntegerField()

class TestResult(models.Model):
test = models.ForeignKey(Test)
indicator = models.ForeignKey(Indicator)
actual_value = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)

为什么要定义多对多关系?谢谢

最佳答案

出于以下三个原因,您应该添加 ManyToMany 属性:

首先,使用此属性,您明确声明了多对多关系,从而正确建模域对象。这非常重要,因为任何看到你的模型的人都会理解这些关系——如果你没有 ManyToMany 属性,读者会对你打算做什么感到困惑。毕竟,django 哲学的一个中心点是“显式优于隐式”!在您的情况下,您应该向测试模型添加指标 = ManyToMany('Indicator', through='TestIndicator') 属性。

此外,ManyToMany 属性将帮助您创建涉及相关模型的查询,而无需使用中间对象。例如,您可以获得具有特定指标名称的所有测试(我知道这也可以通过外键完成,但显式优于隐式)

最后,将 ManyToMany 属性添加到模型之一,您可以创建内联管理表单以轻松编辑关系。例如,在您的情况下,您可以在 TestAdmin 中添加一个内联,通过它您可以向此测试添加指标。

关于Django:通过= 与单独模型的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20918584/

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