我已经从数据库创建了一个 API,我可以查看该 API,但无法通过 URL 进行查询,例如:127.0.0.1:8000/author?author_id=9
,我是不知道在哪里添加查询代码。我想使用字段进行过滤。这是我的 models.py
class AuthorAPI(models.Model):
author_id=models.IntegerField()
name=models.TextField()
author_img_url=models.TextField()
title=models.TextField()
first_published_at=models.DateTimeField()
excerpt=models.TextField()
class Meta:
db_table = 'view_author'
序列化器.py
from rest_framework import serializers
from .models import SortAPI, AuthorAPI
class AuthorAPISerializer(serializers.ModelSerializer):
class Meta:
model=AuthorAPI
fields='__all__'
views.py
from .serializers import APISerializer,AuthorAPISerializer
from .models import SortAPI, AuthorAPI
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def getauthor(request):
if request.method == 'GET':
results = AuthorAPI.objects.all()
serialize = AuthorAPISerializer(results, many=True)
return Response(serialize.data)
最佳答案
在您的 View 中,使用ModelViewset
并添加fliter_backend属性:
filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
请参阅文档:
https://www.django-rest-framework.org/api-guide/filtering/#setting-filter-backends
class AuthorViewset(viewsets.ReadOnlyModelViewset):
serializer_class = AuthorAPISerializer
queryset = AuthorAPI.objects.all()
filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
重要
使用django_filter
将需要您安装额外的要求,但这是非常值得的,请在此处查看django_filter
的安装步骤:
https://django-filter.readthedocs.io/en/stable/guide/install.html
在您的 urls.py
中,您需要使用 SimpleRouter
注册您的查看器,如此处文档中所述:
https://www.django-rest-framework.org/api-guide/viewsets/#example
此外,您还需要设置 filterset_fields
来告诉 DRF 您希望允许用户使用哪些字段进行过滤。
如文档中所述:
重要的警告词可能在文档中没有得到足够的强调,这一点是:
Note that using filterset_fields and filterset_class together is not supported.
完成后,如果您浏览到/author
,您应该会看到一些可用的过滤器控件,等等
关于python - Django Rest Framework 中的 API 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74320031/