2017-02-27 15 views
0

私のURLを使用して基本的なフィルタリングをしようとしています。私は成功せずにいくつかのソリューションを試しました。DRFでURLを使用したフィルタリング

解決策を提案してください。確かに、一般的な解決策

がここにあります私のコードです:

Models.py

class Tag(models.Model): 
    name = models.CharField("Name", max_length=5000, blank=True) 
    level = models.IntegerField("Level", null=True, blank=True) 

Views.py

class TagFilterBackend(filters.BaseFilterBackend): 
    def filter_queryset(self, request, queryset, view): 
     return queryset.filter(owner=request.user) 

Urls.py

router.register(r'tag', TagViewSet) 

I好き嫌いをしたいe:

xyz.com/tag?level=40/ 

レベル40のすべてのアイテムを表示する。

django-filter(DjangoFilter Sと間違えてはいけません)を使用して、私は新しいfilters.pyファイルを作成しました。

しかし、結果は決してフィルタリングされません。私がAPIのURLを打つと、それは私にすべての結果を与えるだけです。

Filter.py

from rest_framework import generics 
from django_filters import rest_framework as filters 
from Tril.models import Tag 
from .serializers import TagSerializer 

class TagFilter(filters.FilterSet): 
    min_price = filters.NumberFilter(level="level", lookup_expr='gte') 
    max_price = filters.NumberFilter(level="level", lookup_expr='lte') 

    class Meta: 
     model = Tag 
     fields = ['level', 'name'] 


class ProductList(generics.ListAPIView): 
    queryset = Tag.objects.all() 
    serializer_class = TagSerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_class = TagFilter 
+0

なぜFilterSet' ''でレベルが= "レベル" 'と何' taglevel'フィールドがでたときにフィールド名です'Tag'モデルは' level'ですか? – AKS

+0

ペーストエラーが修正されました – Ycon

+0

https://github.com/manjitkumar/drf-url-filtersを使用することも検討できます –

答えて

1

私の代わりにジャンゴ・フィルタ、およびURLフィルタを使用。最小限のコードが必要でした。私はこれをdjango-filtersよりもお勧めします。

レベルを結合することもできます(たとえば、API /レベル/ 1書き込み 3)。私はそれが私の元の質問の範囲外であると私は理解していません。

filters.py

from rest_framework import filters, generics 
from .serializers import TagSerializer 
from Tril.models import Tag 

class TagLevel(generics.ListAPIView): 
    serializer_class = TagSerializer 

    def get_queryset(self): 
     taglevel = self.kwargs['level'] 
     return Tag.objects.filter(level=level) 

urls.py

url('^level/(?P<level>.+)/$', Level.as_view()

関連する問題