【问题标题】:Define an order for ManyToManyField by through model field with Django通过使用 Django 的模型字段定义 ManyToManyField 的顺序
【发布时间】:2015-11-02 20:52:37
【问题描述】:
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',
    )

你好。我有product Product 实例。我怎样才能得到这些有序的结果?
product.b_products.all().order_by('product_b_rank')
product.a_products.all().order_by('product_a_rank')

Django 1.8

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    order_by 相关字段中使用双下划线

    Product.objects.order_by("b_products__product_b_rank")
    

    编辑:

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

    【讨论】:

    • django.core.exceptions.FieldError: Cannot resolve keyword 'product_b_rank' into field.
    • 目前最好的近似值是:[relation.product_b for relation in product.product_a_set.order_by('product_b_rank')]
    猜你喜欢
    • 2012-03-25
    • 2021-07-30
    • 2013-08-03
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2019-02-04
    相关资源
    最近更新 更多