voronin
voronin

Reputation: 659

Define an order for ManyToManyField by through model field with Django

class ProductRelation(models.Model):
    product_a = models.ForeignKey('Product')
    product_a_rank = models.PositiveSmallIntegerField('Position')
    product_b = models.ForeignKey('Product')
    product_b_rank = models.PositiveSmallIntegerField('Postition')

class Product(models.Model):
    b_products = models.ManyToManyField('self', through=ProductRelation, symmetrical=False,
    through_fields=('product_a', 'product_b'),
    related_name='a_products',
    )

Hello. I have product Product instance. How can I get those ordered results?
product.b_products.all().order_by('product_b_rank') and
product.a_products.all().order_by('product_a_rank')

Django 1.8

Upvotes: 1

Views: 606

Answers (1)

Aaron Lelevier
Aaron Lelevier

Reputation: 20820

Use a double underscore to order_by a related field:

Product.objects.order_by("b_products__product_b_rank")

Edit:

product.product_a.order_by('product_b_rank')
product.product_b.order_by('product_a_rank')

Upvotes: 2

Related Questions