首页 > 解决方案 > 如何在 django rest 框架文档中添加参数?

问题描述

我在我的 django 应用程序中安装了 coreapi。我已将 url 通常设置为文档中的默认值:http: //www.django-rest-framework.org/topics/documenting-your-api/

当我打开 url 时,会返回一个带有“list - GET”和“create - POST”参数的页面。但是,在 GET 参数中,我看不到我添加的过滤器。如何在 GET 参数表中显示过滤器?目前只有“page”和“page_size”参数出现,但我还需要显示“matricula”、“ano”、“vinculo”和“mes”。

网址.py

from django.conf.urls import url
from django.urls import path
from rest_framework.documentation import include_docs_urls

from api.views import FuncionarioList

urlpatterns = [
    path('api/funcionarios/folha', FuncionarioList.as_view()),
    url(r'^api/docs', include_docs_urls(title='Documentação API')),
]

视图.py

from django.db.models import Q

from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from rest_framework.permissions import IsAuthenticatedOrReadOnly

from api.core.serializer import FuncionarioSerializer
from pessoal.models import Funcionario


class StandardResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = 'page_size'
    max_page_size = 1000


class FuncionarioList(generics.ListCreateAPIView):
    """
    get:
    List Funcionarios - Folha

    """
    serializer_class = FuncionarioSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,)
    pagination_class = StandardResultsSetPagination

    def get_queryset(self):
        # Busca Todos
        queryset = Funcionario.objects.all()
        # Filtros
        matricula = self.request.query_params.get('matricula', None)
        ano = self.request.query_params.get('ano', None)
        mes = self.request.query_params.get('mes', None)
        vinculo = self.request.query_params.get('vinculo', None)
        # Lista de Filtros
        filtro_api = (Q())
        # Validadores
        if matricula:
            filtro_api.add(Q(matricula=matricula), Q.AND)
        if ano:
            filtro_api.add(Q(ano=ano), Q.AND)
        if mes:
            filtro_api.add(Q(mes=mes), Q.AND)
        if vinculo:
            filtro_api.add(Q(vinculo=vinculo), Q.AND)
        # Condição para aplicação do filtro
        if filtro_api is not None:
            queryset = queryset.filter(filtro_api)
        # retornar busca
        return queryset

序列化程序.py

from rest_framework import serializers

from pessoal.models import Funcionario


class FuncionarioSerializer(serializers.ModelSerializer):

    class Meta:
        model = Funcionario
        fields = ('id', 'matricula', 'nome', 'cargo', 'data_admissao', 'salario_fixo','tota_bruto','total_desconto','liquido','data','vinculo')

标签: djangodjango-rest-frameworkcore-api

解决方案


推荐阅读