Nips
Nips

Reputation: 13890

How to sort objects by related field?

I have three 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)
    [...]

And I want to get items from specified category but ordered by position (from Positions). Whether it can be done in a query, like:

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

Or do I need to add a loop:

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

How to do it well?

(I have yet to figure out that if there is no position entry for item in table positions)

Upvotes: 1

Views: 58

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 600041

This is fully explained in the documentation:

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

Upvotes: 3

Related Questions