我有2个型号分类和项目。项目引用了类别。
class Category(models.Model):
name = models.CharField(max_length=32)
class Item(model.Models):
name = models.CharField(max_length=32)
category = models.ForeignKey(Category)
sequence = models.IntegerField()
序列字段应该捕获类别中Item的序列。
我的问题是: 我需要在类别和/或项目上设置什么元选项,以便我这样做:
category.item_set.all()
我按照序列号排序的项目。
PS:我现在知道一个名为ordering_with_respect_to的元选项..但它仍然不清楚它是如何工作的,而且我在序列列中也有遗留数据。如果正确的方法需要,我愿意接受数据迁移。
答案 0 :(得分:6)
您正在寻找的是:
class Item(model.Models):
name = models.CharField(max_length=32)
category = models.ForeignKey(Category)
sequence = models.IntegerField()
class Meta:
ordering = ['sequence',]
这将确保Item
始终按sequence
排序。
答案 1 :(得分:3)
category.item_set.all().order_by('sequence')
答案 2 :(得分:0)
有点迟了,之前的答案并没有解决我的具体问题,但他们引导我回答,所以我要把它扔进去:
我需要专门针对一个视图对prefetch_related
个对象进行排序,因此更改默认排序并不好(也许model_manager
会这样做,idk)。但我找到了this in the docs。
我有以下型号:
class Event(models.Model):
foo = models.CharField(max_length=256)
....
class Session(models.Model):
bar = models.CharField(max_length=256)
event = models.ForeignKey(Event)
start = models.DateTimeField()
....
class Meta:
ordering = ['start']
现在在特定视图中,我希望看到所有Event
s,但我希望他们的Session
s的顺序相反,即ordering = ['-start']
所以我在视图get_queryset()
中执行此操作:
from django.db.models import Prefetch
session_sort = Session.objects.all().order_by('-start')
prefetch = Prefetch('sessions', queryset=session_sort)
events = Event.objects.all().prefetch_related(prefetch)
希望它有所帮助!
* BTW,这只是一个简化版本,在我的实际使用案例中有一堆过滤器和其他prefetch_related
参数。