drf-yasg/drf-spectaulous - 滤波器参数描述

Mil*_*ano 3 python django django-rest-framework drf-yasg drf-spectacular

编辑:这个问题最初是在使用时发布的,yasg但我切换到了spectacular所以两种解决方案都可以。

我很好奇是否有办法告诉参数yasgspectaculardjango-filter参数添加描述。

我想告诉开发者,parent领域就是一个Country模型pk

模型

class County(AddressModel):
    parent = models.ForeignKey('Country', verbose_name='Krajina', related_name='counties', on_delete=models.PROTECT, help_text='Krajina')

    class Meta:
        verbose_name = 'Kraj'
        verbose_name_plural = 'Kraje'
Run Code Online (Sandbox Code Playgroud)

筛选

class CountyFilter(FilterSet):
    class Meta:
        model = County
        fields = {
            'name': ['icontains'],
            'parent': ['exact']
        }
Run Code Online (Sandbox Code Playgroud)

串行器

class CountySerializer(serializers.ModelSerializer):
    class Meta:
        model = County
        fields = ['id', 'name']
Run Code Online (Sandbox Code Playgroud)

看法

class AddressCountyAutocompleteView(ListAPIView):
    serializer_class = CountySerializer
    filter_backends = [DjangoFilterBackend]
    filterset_class = CountyFilter
    queryset = County.objects.all()
    pagination_class = AddressAutocompletePagination

    def list(self, request, *args, **kwargs):
        return super().list(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

这是自动生成的招摇:

在此输入图像描述

是否可以在不编写自定义方案的情况下做到这一点?

小智 5

这个答案是壮观的。帮助文本必须附加在某处。如果您想将其放在过滤器上,则需要显式设置过滤器字段才能附加帮助文本:

class ProductFilter(FilterSet):
    number_id = NumberFilter(help_text='some injected help text')

    class Meta:
        model = Product
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下命令覆盖检测到的参数

@extend_schema_view(
    list=extend_schema(parameters=[
        OpenApiParameter(name='name__icontains', description="some help text")
    ])
)
class AddressCountyAutocompleteView(ListAPIView):
Run Code Online (Sandbox Code Playgroud)

恕我直言,第一选择会更稳健。