Python 在多对多字段上订购django模型。需要非规范化吗?
我有一个系统,用于从某些类别的零件中组合项目 例如,以以下类别为例:Python 在多对多字段上订购django模型。需要非规范化吗?,python,django,Python,Django,我有一个系统,用于从某些类别的零件中组合项目 例如,以以下类别为例: 1:(地点) 2:(材料) 以及以下部分: 墙(FK=1) 屋顶(FK=1) 屋顶(FK=1) 砖(FK=2) 瓷砖(FK=2) 木材(FK=2) 要组成这些项目: 墙。砖,屋顶。木头,墙。木头 class Category(models.Model): ordering = models.IntegerField() desc = models.CharField() class Part:
- 1:(地点)
- 2:(材料)
- 墙(FK=1)
- 屋顶(FK=1)
- 屋顶(FK=1)
- 砖(FK=2)
- 瓷砖(FK=2)
- 木材(FK=2)
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()方法中得到更新。这将意味着对模型进行非规范化…如果我理解正确,数据库中不存在排序键,所以数据库无法对其进行排序(或者至少是很小的排序,比如使用Django ORM) 在这些条件下,是-反规范化
这不丢脸。如前所述,规范化的数据集是针对sissies的…若我理解正确,那个么数据库中不存在排序键,所以数据库无法对其进行排序(或者至少是很小的排序,比如使用Django-ORM) 在这些条件下,是-反规范化
这不丢脸。如前所述,规范化数据集是为娘娘腔设计的…好吧,去规范化让我感觉自己像个娘娘腔。我想这是有道理的。需要在保存()时更新name_denormed字段,不仅针对项目,还针对零件甚至类别,以保护完整性。是。从清晰的角度来看,这有点糟糕,但我会在这里坚持下去……denorm是生活的事实;)嗯,去规范化让我觉得自己像个娘娘腔。我想这是有道理的。需要在保存()时更新name_denormed字段,不仅针对项目,还针对零件甚至类别,以保护完整性。是。从清晰的角度来看,这有点糟糕,但我会在这里坚持下去……denorm是生活的事实;)