python - 如何正确记录查询参数(搜索,过滤)Django Rest Framework?

标签 python django django-rest-framework

我是 DRF 渲染文档的新手。 我不明白如何在代码中正确记录它以在文档中呈现描述。我正在使用 DRF Docs为了它。

例如:我有可以检索一些数据的路线。在相关 View 中,我有:

search_fields = ('name', 'registration_date')

但是这些字段在文档页面上没有描述。 enter image description here .

所以我想为他们添加一个描述。有办法吗?

最佳答案

总结

DRF 文档中有三种类型的描述(正如我所尝试的),它们依赖于两个位置的设置。

  • 类型1:路径参数说明->在模型字段定义处设置
  • 类型 2:查询参数说明 -> 设置在特定字段的过滤器定义中
  • 类型 3:请求正文描述 -> 与类型 1 相同

类型 1 和类型 3 描述的模型字段定义

# my_project/my_app/models.py
from django.db import models
from django.utils.translation import gettext_lazy as _

class MyModel(models.Model):
    id = models.BigAutoField(primary_key=True, help_text=_("Field id - This will show up in DRF docs Path Parameter Description/Request Body Description, '_' meaning using django translation module"))
    field1 = models.IntegerField(help_text=_("Field field1 - This will show up in DRF docs Path Parameter Description/Request Body Description, '_' meaning using django translation module"))

用于类型 2 描述的特定字段定义的 SearchFilter

# my_project/my_app/filters.py
from rest_framework import filters

class MyFilter(filters.SearchFilter):
    search_param = 'field1'
    search_title = 'Exact matches Field1' # Shows up in DRF docs interactive query pop-up menu as the title for the query section of the field1
    search_description = 'This will show up in DRF docs Query Parameter Description'

序列化器和 ViewSet 配置

# my_project/my_app/serializers.py
from rest_framework import serializers

from my_app.models import MyModel

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'

# my_project/my_app/views.py
from rest_framework import viewsets

from my_app.models import MyModel
from my_app.serializers import MySerializer
from my_app.filters import MyFilter

class MyViewSets(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer
    filter_backends = [MyFilter]
    search_fields = ['=field1', '@field1']
        # The first charactor '='/'^' is used by SearchFilter.filter_queryset while doing
        # the SearchFilter.construct_search method
        # and '=' for exact match while '^' for starts with search
        # One could get all options at rest_framework.filters.SearchFilter.lookup_prefixes
        # BTW my rest_framework version is djangorestframework==3.11.1

最后是urls和设置配置

# my_project/my_app/urls.py
from django.urls import path, include
from rest_framework import routers

from my_app.views import MyViewSets

router = routers.DefaultRouter()
router.register('test', MyViewSets)

urlpatterns = [
    path('', include(router.urls))
]

# my_project/my_project/urls.py
from django.urls import path, include
from rest_framework.documentation import include_docs_urls

urlpatterns = [
    path('docs/', include_docs_urls('API Documentaion')),
    path('my_app/', include('my_app.urls'))
]

此处演示:drf_docs_description

关于python - 如何正确记录查询参数(搜索,过滤)Django Rest Framework?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281116/

相关文章:

python - 使用经过训练的 Keras 模型对新的 csv 数据进行预测

python - Django-mptt 命令

python - 将每日时间序列透视为 Pandas 中的周行

django - 按计算字段排序查询集

python - 如何在 Django Rest Framework 中创建 Json Web token 以供用户登录?

python - django-tenant-schema 为所有租户启用管理模块

jython 上的数据库 Django

Django - 导入 storages.backends 时出错

python - 使用 Django 通过 gmail 发送电子邮件时出现 ConnectionRefusedError

django - 在 django-rest-framework 中过滤 ListAPIView