我正在尝试使用我的网址进行基本过滤。我尝试了几种解决方案但没有成功。
请提出一个直接的解决方案。当然有一个通用的解决方案
这是我的代码:
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
level = models.IntegerField("Level", null=True, blank=True)
class TagFilterBackend(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
return queryset.filter(owner=request.user)
router.register(r'tag', TagViewSet)
我希望能够像这样过滤:
xyz.com/tag?level=40/
仅显示40级的所有项目。
使用django-filter(不要误认为是DjangoFilter S ),我创建了一个新的filters.py文件。
但是,结果永远不会被过滤掉。当我点击API网址时,它只会给我所有结果。
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 :(得分:1)
我使用了django-filter和URL过滤器。需要最少的代码。我建议使用django-filters。
我也希望能够组合级别(例如写api / level / 1& 2& 3),但如果没有人回答我理解它超出了原始问题的范围。
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)
url('^level/(?P<level>.+)/$', Level.as_view()