значение порядка django не хранится в базе данных - PullRequest
0 голосов
/ 12 мая 2011

У меня есть модель, Rating, которая выглядит примерно так:

class Rating(models.Model):
    upvotes = models.IntegerField(default=0)
    downvotes = models.IntegerField(default=0)
    @property
    def total(self):
        return self.upvotes - self.downvotes

У меня есть группа рейтингов, которые мне нужно упорядочить по свойству total. Как видите, это , а не значение, хранящееся в базе данных. rating_set.order_by("total") не работает.

Я мог бы использовать функцию Python sorted в списке оценок, с key=lambda r: r.total. Но мне кажется, что это было бы довольно неэффективно, и, вероятно, существует лучший путь изнутри Джанго.

Поддерживает ли Django упорядочение по производным значениям? Могу ли я повысить производительность, сделав общее значение, хранящееся в базе данных?

1 Ответ

1 голос
/ 12 мая 2011

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

Rating.objects.extra(select={'total': "upvotes - downvotes"}).order_by('-total')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...