Я пытаюсь реализовать модель, которая представляет отсортированные списки элементов, без необходимости каждый раз указывать порядок сортировки
Я не могу найти способ настроить метод get_queryset ()переадресовать менеджер отношений «многие ко многим»
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=50)
class Meta:
ordering = ['name']
class List(models.Model):
name = models.CharField(max_length=50)
items = models.ManyToManyField(Item, through='Listing'))
class Listing(models.Model):
list = models.ForeignKey(List, on_delete=models.CASCADE)
items = models.ForeignKey(Item, on_delete=models.CASCADE)
index = models.SmallIntegerField()
class Meta:
ordering = ['index']
Я бы хотел, чтобы Item.objects.all()
был отсортирован по имени (работает), а List.objects.get(pk=1).items
был отсортирован по листингу.index (не работает; также сортируется поимя)
Я могу получить желаемое поведение, изменив List
как
class List(models.Model):
name = models.CharField(max_length=50)
items_unordered = models.ManyToManyField(Item, through='Listing'))
@property
def items(self):
return self.items_unordered.order_by('listing_set__index')
Но есть ли способ сделать это, не бесполезно items_unordered
, лежащий вокруг пространства имен?