【发布时间】:2017-07-17 15:19:48
【问题描述】:
我正在尝试使用我的 URL 进行基本过滤。我尝试了几种解决方案都没有成功。
请提出一个直截了当的解决方案。当然有一个通用的解决方案
这是我的代码:
模型.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)
网址.py
router.register(r'tag', TagViewSet)
我希望能够像这样过滤:
xyz.com/tag?level=40/
只显示40级的所有物品。
使用 django-filter(不要被误认为是 DjangoFilterS),我创建了一个新的 filters.py 文件。
但是,结果永远不会被过滤。当我点击 API url 时,它只会给我所有结果。
过滤器.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
【问题讨论】:
-
当
Tag模型中的字段名称是level时,为什么level="level"在FilterSet中以及taglevel字段是什么? -
修复了这个问题——粘贴错误
标签: python django django-rest-framework django-filter