Заказ модели Django на поле «многие на май». Требуется денормализация? - PullRequest
1 голос
/ 09 октября 2010

У меня есть система для составления элементов из частей в определенных категориях

Например, возьмите следующие категории:

  • 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 Ответ

1 голос
/ 10 октября 2010

Если я правильно понимаю, ключ сортировки не существует в базе данных, поэтому база данных не может его отсортировать (или, по крайней мере, тривиально, как при использовании Django ORM).

В этих условиях да - денормализовать.*

Это не позор.Как уже говорилось, нормализованный набор данных предназначен для бабы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...