我正在尝试实现一种表示项目的已排序列表的模型,而不必每次都指定排序顺序
我找不到自定义前向多对多关系管理器的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
呢?