Django按属性字段排序

时间:2017-09-18 14:44:55

标签: python django django-rest-framework django-rest-framework-filters

我正在使用'OrderingFilter'来允许订购。 根据Django文档,当不指定'ordering_fields'时,您可以按视图序列化程序中提到的任何字段进行排序。我有一个字段,它基本上是序列化程序中的@property字段。但是当尝试按该字段排序时,我收到以下错误:

Cannot resolve keyword 'spec_identifier' into field. Choices are:....

这是模型视图的一部分:

class ItemViewSet(BaseViewMixin, MyModelView):
    permission_classes = [MyItemViewPermissions]
    serializer_class = ItemSerializer
    filter_backends = (ItemFilter, OrderingFilter,)

这是我想要订购的属性定义:

@property
def spec_identifier(self):
    return self.spec.identifier if self.spec else None

可以通过它订购吗?

3 个答案:

答案 0 :(得分:1)

因此,经过研究和反复试验,这就是解决方案:

ordering_fields = tuple(serializer_class.Meta.fields + ['spec__identifier'])

答案 1 :(得分:0)

您可以订购并获取价值属性, 但您可以按相关字段订购,例如

Item.objects.all().order_by('spec__identifier')

答案 2 :(得分:0)

请尝试以下代码。

class ItemViewSet(BaseViewMixin, MyModelView):
    permission_classes = [MyItemViewPermissions]
    serializer_class = ItemSerializer
    filter_backends = (ItemFilter, OrderingFilter,) 
    ordering_fields = ('spec__identifier',)
相关问题