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']) 
相關問題