Drf-yasg - описание для параметров фильтра
Мне интересно, есть ли способ сказать yasg
добавить описание к django-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'
Filter
class CountyFilter(FilterSet):
class Meta:
model = County
fields = {
'name': ['icontains'],
'parent': ['exact']
}
Сериализатор
class CountySerializer(serializers.ModelSerializer):
class Meta:
model = County
fields = ['id', 'name']
Вид
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)
Это автоматически созданный swagger:
Возможно ли это сделать без написания пользовательской схемы?
Этот ответ предназначен для зрелищности. Текст справки должен быть где-то прикреплен. Если вы хотите, чтобы он был в фильтре, вам нужно явно установить поле фильтра, чтобы прикрепить текст справки:
class ProductFilter(FilterSet):
number_id = NumberFilter(help_text='some injected help text')
class Meta:
model = Product
альтернативно вы можете переопределить обнаруженный параметр с помощью
@extend_schema_view(
list=extend_schema(parameters=[
OpenApiParameter(name='name__icontains', description="some help text")
])
)
class AddressCountyAutocompleteView(ListAPIView):
первый вариант был бы более надежным, имхо.