Django: индивидуальный заказ по многим отношениям - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь реализовать модель, которая представляет отсортированные списки элементов, без необходимости каждый раз указывать порядок сортировки

Я не могу найти способ настроить метод 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, лежащий вокруг пространства имен?

...