0

我使用“OrderingFilter”允许排序。 根据Django文档,不指定“ordering_fields”时,你可以通过在视图中串行提到的任何字段顺序。我有一个字段,它基本上是序列化程序中的@property字段。但是,试图通过现场订货的时候,我得到以下错误:Django的排序方式属性字段

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 

是否有可能通过它来订购?

回答

0

您可以订购和价值的财产, 得到,但你可以通过相关领域的目的,例如

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

我希望允许从客户端查询参数做到这一点 - “?排序= spec_identifier”使用OrderingfFilter,同其他领域 – user2880391

+1

你尝试'?排序= spec__identifier'查询字符串中双下划线? –

0

请尝试以下代码。

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

所以,研究和反复试验后,这是解决方案:

ordering_fields = tuple(serializer_class.Meta.fields + ['spec__identifier']) 
相关问题