使用Django RestFramework和Angular fronted构建过滤器
我尝试从Django后端为我的前端Angular构建一个过滤器,或者如何使用restframework构建过滤器请大家帮助,我在后端有这个 viewset.py使用Django RestFramework和Angular fronted构建过滤器,django,angular,Django,Angular,我尝试从Django后端为我的前端Angular构建一个过滤器,或者如何使用restframework构建过滤器请大家帮助,我在后端有这个 viewset.py from snippets.models import Snippet from .serializers import SnippetSerializer from rest_framework import viewsets from rest_framework.decorators import action from rest
from snippets.models import Snippet
from .serializers import SnippetSerializer
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from django_filters import rest_framework as filters
class SnippetFilter(filters.FilterSet):
class Meta:
model = Snippet
fields = {
'title': ['icontains'],
'created': ['iexact', 'lte', 'gte'],
}
class SnippetViewSet(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
filterset_class = SnippetFilter
@action(methods=['get'], detail=False)
def newest(self, request):
newest = self.get_queryset().order_by('created').last()
serializer = self.get_serializer_class()(newest)
return Response(serializer.data)
我显式地创建过滤器。例如,下面的代码将生成
snippets/?snippet\u field\u lte=
和snippets/?另一个\u field=
端点
class SnippetFilter(filters.FilterSet):
snippet_field_lte = NumberFilter(name="snippet_field", lookup_expr="lte")
another_field = NumberFilter(name="another_field", lookup_expr="exact")
class Meta:
model = Snippet
fields = ["snippet_field_lte", ]
我有同样的情况(Django后端,Angular前端)。不过,我并没有直接使用restframework过滤器,但是,您可以尝试下面的方法,这将允许您使用官方文档中描述的模型进行任何类型的查询
类MyModelViewSet(ViewSet.ModelViewSet):
queryset=MyModel.objects.all()
serializer\u class=MyModelSerializer
def get_queryset(自我):
results=super(MyModelViewSet,self).get_queryset()
#而不是在筛选器中调用显式属性
对于键,self.request.GET.items()中的值:
#我使用从request.GET获得的字典中的键/值对
results=results.filter(**{key:value})#准确地命名为“Jonh Doe”
localhost:8000/mymodel?name\uu icontains=Jonh%20D
-->name包含“john D”
localhost:8000/mymodel?年龄=20
-->年龄大于20
localhost:8000/-->从MyModel返回所有对象