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

Django 如何按相关字段对对象进行排序?,django,django-models,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.CharFi

我有三种型号:

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:
    ???
如何做好

(我还没有弄清楚,如果表位置中的项目没有位置条目)

这已得到充分解释:


这里的问题是,项可能有多个位置对象,因此使用这样的过滤器有可能获得重复项。过滤器应该是这样的
Item.object.filter(positions\uu category=category)。order\u by('positions\uu position')
和Item.categories在这里看起来是多余的。也许您还需要阅读此文档“多对多关系上的额外字段”
Item.objects.filter(...).order_by('positions__position')