Как отсортировать объекты по смежным полям?
У меня есть три модели:
class Category(models.Model):
name = models.CharField(max_length=255, verbose_name=u'Name', blank=True, null=True)
parent = models.ForeignKey('self', null=True, blank=True)
[...]
class Item(models.Model):
name = models.CharField(max_length=255, verbose_name=u'Name', blank=True, null=True)
categories = models.ManyToManyField(Category, null=True, blank=True, related_name='cats',verbose_name=u'Categories')
[...]
class Positions(models.Model):
category = models.ForeignKey(Category)
item = models.ForeignKey(Item)
position = models.IntegerField(verbose_name=u'Position in category', default = 0)
[...]
И я хочу получить предметы из указанной категории, но упорядоченные по позиции (из позиции). Может ли это быть сделано в запросе, например:
items = Items.objects.filter([...]).order_by(??)
Или мне нужно добавить цикл:
items = Items.objects.filter([...])
for item in items:
???
Как это сделать хорошо?
(Мне еще предстоит выяснить, что если в позиции таблицы нет позиции для позиции)
1 ответ
Решение
Это полностью объясняется в документации:
Item.objects.filter(...).order_by('positions__position')