0

私はdjango restフレームワークを使ってプロジェクトに取り組んでいます。私は、userによって与えられた異なるパラメータをフィルタリングする必要があります。私はdjangoフィルタバックエンドを使用しています。Djangoバックエンドフィルタを使用するフィルタ範囲は?

class FilterViewSet(viewsets.ModelViewSet): 

serializer_class = SearchSerializer 

#Filters on specific fields 
filter_backends = (DjangoFilterBackend,) 

filter_fields = ('property_zipcode','property_state', 
       'property_county', 
       'property_city','property_area',)#range between 100 to 500 or area less then 500. 

#range is pass by user as a property_area=300. 

def filter_queryset(self, queryset): 
    if self.request.query_params.get('property_state', None): 
     queryset = super(FilterViewSet, self).filter_queryset(self.get_queryset()) 
     return queryset 
    else: 
     queryset = self.get_queryset() 
     return queryset 

すべてが正常に動作している: はここに私のコードです。しかし、今私は100平方フィートから500平方フィートまでの範囲に基づいてproperty_areaをフィルタリングする必要があります。どのように私はdjangoFilterバックエンドを使用してこれを達成することができますか?

+0

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#range – geckos

+0

私はここにすべてのジャンゴクエリセットのドキュメントを読んで、私はちょうどフィルターバックエンドを使用してdjango restフレームワークでそれを渡す方法を知りたい –

+0

django-filterのマニュアルも読んでいますか? http://django-filter.readthedocs.io/en/master/ref/filters.html#numericrangefilter –

答えて

0

ありがとう@Gabriel Muj。 django-filterのドキュメントから私は私の問題を解決しました。私は独自のフィルタクラスを作成し、フィルタに使用するフィールドを追加しました。

class Filter(django_filters.FilterSet): 

    class Meta: 
     model = Property 
     fields = { 
      'property_state': ['exact'], 
      'year_built': ['lt', 'gt'], 
      'tax':['lt','gt'], 

     } 

ビューセットでそれを呼び出します。

class FilterViewSet(viewsets.ModelViewSet): 

      serializer_class = SearchSerializer 

     #Filters on specific fields 
      filter_class = Filter 



     def filter_queryset(self, queryset): 
      if self.request.query_params.get('property_state', None): 
       queryset = super(FilterViewSet, self).filter_queryset(self.get_queryset()) 
       return queryset 
      else: 
       queryset = self.get_queryset() 
       return queryset 
関連する問題