在many-to-may字段中订购django模型。是否需要非规范化?

时间:2010-10-09 16:03:18

标签: python django

我有一个系统,用于从某些类别的部件中编写项目

例如,请使用以下类别:

  • 1 :(位置)
  • 2 :(材料)

以下部分:

  • 墙(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()方法上更新。这意味着对模型进行非规范化......

1 个答案:

答案 0 :(得分:1)

如果我理解正确,数据库中不存在排序键,因此数据库无法对其进行排序(或者至少在简单的情况下,如使用Django ORM)。

在这些条件下,是 - 非规范化。

这并不羞耻。如上所述,标准化数据集适用于sissies ......