排序Django中的相关对象
问题描述:
我有2个模型类别和项目。一个项目有一个对类别的引用。排序Django中的相关对象
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()
序列字段应该捕获类别内的项目序列。
我的问题是:什么 元选择我需要的类别和/或项目的集合,这样当我做的:
category.item_set.all()
,我得到其序列号排序的项目。
PS:我现在意识到一个名为ordering_with_respect_to的元选项,但它仍然不清楚它是如何工作的,并且我在序列列中还有遗留数据。如果正确的方法需要,我愿意进行数据迁移。
答
什么你要找的是:
class Item(model.Models):
name = models.CharField(max_length=32)
category = models.ForeignKey(Category)
sequence = models.IntegerField()
class Meta:
ordering = ['sequence',]
这将确保Item
s的总是sequence
订购。
答
category.item_set.all().order_by('sequence')
答
有点儿晚了,以前的答案没有解决我的具体问题,但他们使我的答案,所以我会扔这:
我需要我的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)
希望它有助于某人!
*顺便说一句,这只是一个简化版本,在我的实际使用案例中有一堆过滤器和其他prefetch_related
参数。
有没有办法设置默认排序,以便我不必每次都手动排序呢? – arustgi 2011-05-23 15:54:25
谢谢Uko。您建议的order_with_respect_to是否位于类别模型或项目模型中? – arustgi 2011-05-23 16:02:59
对不起,现在是正确的 – 2011-05-23 16:04:14