Django:通过=与分离模型的多对多关系



我只是想知道,如果你可以使用一个单独的模型,为什么你需要使用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哲学的一个中心点是"显式比隐式更好"!在您的情况下,您应该将indicators=ManyToMany('Indicator',through='TestIndicator])属性添加到测试模型中。

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

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

最新更新