1
我有一種系統,用於在某些類別在多對一字段中訂購django模型。非規範化要求?
從部件構成的物品例如採取以下類別:
- 1:(地點)
- 2:(材料)
以下部分:
- Wall(FK = 1)
- 屋頂(FK = 1)
- 屋頂(FK = 1)
- 磚(FK = 2)
- 瓷磚(FK = 2)
- 伍德(FK = 2)
要撰寫這些項目: Wall.Brick,Roof.Wood,Wall.Wood
class Category(models.Model):
ordering = models.IntegerField()
desc = models.CharField()
class Part:
name = models.CharField()
category = models.ForeignKey(Category)
class Meta:
unique_together = ('name', 'category')
ordering = ['category','name']
class Item:
parts = ManyToManyField(Part)
def __unicode__(self):
return ".".join([p.name for p in self.parts.all()])
現在的問題:如何訂購的物品?我寧願讓他們按照組成名字順序升序,但不知道如何。
做事情的一種方式可能是額外的名稱字段,它在save()方法上得到更新。這將意味着反規範化模型...
那麼,denormalizing讓我感覺像一個sissie。我想這是有道理的。 需要在save()時更新name_denormed字段,不僅爲Item而且還有Part以及類別來保護完整性。 – 2010-10-11 13:24:37
是的。從清晰的角度來看,它有點吸引人,但我會在這裏找到它...... denorm是生活中的事實;) – Almad 2010-10-11 15:14:30