在Django,我有以下型号:
class Pink(models.Model):
...
class White(models.Model):
...
pinks = models.ManyToManyField(Pink)
...
在某一点上,我需要在a
Pinks
中定义White
的顺序。(为了有
White1.pinks: P1, P2, P3
而不是随机White1.pinks: P2, P3, P1
),所以我创造了
class PinkInWhite(models.Model):
pink = models.ForeignKey(Pink)
white = models.ForeignKey(White)
position = models.PositiveIntegerField("pink's position inside this white")
class Meta:
ordering = ['white','position']
问题1:这是更好的解决方案吗?
问题2:这显然是多余的:我的
pinks
模型中仍然有一个White
字段,因为我在其他不需要排序的情况下需要它。我可以保留它吗?还是最好删除它,并始终使用PinkInWhite
关系模型?(模特名字是虚构的。为了简化这个问题,我没有使用模特的真名,谈论X先生和Y先生也无助于阅读……)
最佳答案
这取决于你的预期用途有多明确。
如果您只是在寻找一组白色的有序pink,那么您可以将所有内容填充到一个表中,并避免连接表PinkInWhite
。
但如果你将来可能想有其他颜色,除了红色,然后有粉红色直接系在白色,因为你做太多限制。只需将白色保留为白色,并创建一个连接表,将pink链接到适当的白色(带顺序)。然后你就有了制造蓝色、黄色、任何颜色的灵活性。
但你的问题的简短答案是,你拥有的将是有用的。