2015-08-28 118 views
1

我有一些類如何通過嵌套對象字段進行排序?

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,它不起作用。

回答

1

當你使用Django的REST的架構,你必須使用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,但使用視圖上的排序參數允許您指定的方式排序,它可以自動地爲環境傳送到呈現模板

控制這
+0

感謝 ordering_fields =('‘poduct__id’) 和發送排序依據:product__id –

+0

@AndrewMedvedsky高興help.Please接受的答案,如果它幫助。 – Aameer

1

您可以嘗試指定product__id以根據productid執行排序。

orderby = product__id 

在視圖集中指定ordering_fields

ordering_fields = ('product__id',) 
+0

它不工作( –

+0

你指定排序字段'product__id' –

相關問題