如何通过嵌套对象字段排序?

时间:2015-08-28 10:12:05

标签: angularjs django django-rest-framework

我有一些课程

class MarketProduct(models.Model, ObjectMarket):
    _state_class = 'MarketProductState'

    uuid = models.UUIDField(u'Код',
                        default=uuid.uuid4, editable=False)
    name = models.CharField(u'Название',
                        max_length=255, db_index=True)
class MarketItem(models.Model, ObjectMarket):
    _state_class = 'MarketItemState'

    STOCK, AUCTION = 1, 2
    ITEM_CHOICES = (
        (STOCK, u'Сток'),
        (AUCTION, u'Аукцион'),
    )

    product = models.ForeignKey(MarketProduct)
    start_at = models.DateTimeField(u'Начало продажи')

我想获得MarketItemViewSet并使用

filter_backends = (filters.OrderingFilter,`)

我通过有角度的orderby提交请求。 如果我发送orderby = start_at,一切都很好,但我想发送 orderby = product.id,它不起作用。

2 个答案:

答案 0 :(得分:1)

您可以尝试指定product__id根据id的{​​{1}}执行排序。

product

在视图集中指定orderby = product__id

ordering_fields

答案 1 :(得分:1)

当你使用django-rest-framework时,你必须使用ordering_fields,你可以从文档here中看到。希望它有助于示例:

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (filters.OrderingFilter,)
    ordering_fields = ('username', 'email')
    ordering = ('created_on') # for reverse ordering = ('-created_on')

如果在视图上设置了排序属性,则将其用作默认排序。

通常,您可以通过在初始查询集上设置order_by来控制此操作,但是使用视图上的排序参数可以指定顺序,然后可以将其作为上下文自动传递给a渲染模板