如何按相关字段对对象进行排序?

时间:2012-11-27 12:39:32

标签: django django-models

我有三种模式:

class Category(models.Model):
    name = models.CharField(max_length=255, verbose_name=u'Name', blank=True, null=True)
    parent = models.ForeignKey('self', null=True, blank=True)
    [...]

class Item(models.Model):
    name = models.CharField(max_length=255, verbose_name=u'Name', blank=True, null=True)
    categories = models.ManyToManyField(Category, null=True, blank=True, related_name='cats',verbose_name=u'Categories')
    [...]

class Positions(models.Model):
    category = models.ForeignKey(Category)
    item = models.ForeignKey(Item)
    position = models.IntegerField(verbose_name=u'Position in category', default = 0)
    [...]

我希望从指定的类别获取项目,但按位置排序(从职位)。 是否可以在查询中完成,例如:

items = Items.objects.filter([...]).order_by(??)

或者我是否需要添加循环:

items = Items.objects.filter([...])
for item in items:
    ???

如何做得好?

(我还没弄明白,如果桌子位置的项目没有位置输入)

1 个答案:

答案 0 :(得分:3)

这完全解释为in the documentation

Item.objects.filter(...).order_by('positions__position')