我只是想知道为什么你需要使用通过的多对多关系,如果你只是可以使用一个单独的模型?
例如:
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)
为什么要定义多对多关系?感谢
答案 0 :(得分:6)
您应该添加ManyToMany属性有三个原因:
首先使用此属性,您将明确声明多对多的relstion,从而正确建模您的域对象。这非常重要,因为任何看到你的模型的人都会理解这些关系 - 如果你没有ManyToMany属性,那么读者就会对你打算做什么感到困惑。毕竟,django哲学的一个中心点是“明确胜过隐性”!在您的情况下,您应该将一个指示符= ManyToMany('Indicator',through ='TestIndicator')属性添加到Test模型。
此外,ManyToMany属性将帮助您创建涉及相关模型的查询,而无需使用中间对象。例如,您可以获得具有特定指标名称的所有测试(我知道这也可以通过ForeignKey完成,但显式优于隐式)
最后,将ManyToMany属性添加到其中一个模型,您可以创建内联管理表单以轻松编辑关系。例如,在您的情况下,您可以在TestAdmin中添加内联,通过该内联,您可以向此测试添加指标。