2016-11-17 63 views
1

我正在使用DjangoRestApi,雖然它的工作原理與基於queryset(基於orm的)視圖的魅力一樣,但我努力使視圖使用不同的後端以相同的方式運行orm基於的觀點。值得注意的是,我想添加過濾器並讓它們自動投射和驗證。django-rest-framework非基於orm的過濾

僞代碼如下:

class NewsFilter(django_filters.FilterSet): 
    category = django_filters.NumberFilter(name='category') 
    limit = django_filters.NumberFilter(name='limit') 
    page = django_filters.NumberFilter(name='page') 


class NewsView(generics.APIView): 
    filter_class = NewsFilter 

    def get(self, request): 
     filters = self.filter_class(??) # not sure, what to put here 

     payload = logic.get_business_news(**filters.data) # same 

     return Response(payload, status=status.HTTP_200_OK) 

任何暗示如何解決問題,將不勝感激。

最終目標是:

  • 用戶類型的東西放到網址或通過POST,Django的休息截取相關值發送,把它們提取出來,他們鑄就成正確的類型,並返回一個字典
  • 過濾器因爲他們如果串行器是基於ORM顯示

回答

1

函數簽名任何單一過濾器類似於

class MyFilter(django_filters.Filter): 
    def filter(self,queryset,value): 
     [...] 

The function signature to a FilterSet is:

def __init__(self, data=None, queryset=None, prefix=None, strict=None): 

因此,它看起來就像你在request.GET通過爲data PARAM,然後通過你的查詢集。

+0

我已經稍微編輯了原始問題來澄清我在找什麼,因爲這個答案是a)非常不完整,b)我有這樣的感覺,沒有回答我的問題 – Drachenfels

+0

從根本上講,'FilterSet'對查詢集進行操作。你有查詢設置,你正在過濾嗎?如果沒有,你不能使用'FilterSet'。 –

+0

我不想使用queryset,因爲我不使用ORM,我所需要的是在/ api/endpoint中呈現表單,以便開發人員和其他非技術性人員可以使用api進行測試/使用,而無需手動鍵入json有效載荷等。我開始意識到,django-rest-framework實際上是非常有限的框架,只有一個工作流程。 :/ – Drachenfels