Django:基于多对多关系的自定义订购

时间:2019-07-09 20:01:56

标签: python django django-models

我正在尝试实现一种表示项目的已排序列表的模型,而不必每次都指定排序顺序

我找不到自定义前向多对多关系管理器的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按Listing.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呢?

0 个答案:

没有答案