Скрытие определенного поля в документации drf_yasg django swagger
У меня есть проект с drf_yasg, есть сериализатор с методом to_internal_value, который пишет для меня поле('mobile_operator_code').
Поле переопределено, поэтому нам не нужно вводить его в запрос.
Хотя нам нужно вывести его в ответ.
Documentation(drf_yasg) принимает fields='all' и документирует все для запроса, хотя нам не нужен 'mobile_operator_code' в документации запроса.
Как скрыть это поле для запроса, но не для ответа?
Сериализатор выглядит следующим образом:
class ClientSerializer(serializers.ModelSerializer):
tags = ClientTagsField(required=False)
mobile_operator_code = serializers.CharField(required=False)
class Meta:
model = Client
fields = '__all__'
def to_internal_value(self, data):
data_overriden = data.copy()
if 'phone' in data:
data_overriden['mobile_operator_code'] = get_operator_code_from_phone(data['phone'])
return super().to_internal_value(data_overriden)
Вид следующий:
class CreateClientView(mixins.CreateModelMixin, generics.GenericAPIView):
serializer_class = ClientSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
Модель:
class Client(models.Model):
phone = models.CharField(max_length=11, verbose_name="номер телефона клиента")
mobile_operator_code = models.CharField(max_length=3, verbose_name="код мобильного оператора")
tags = models.JSONField(null=True, blank=True, verbose_name="теги")
timezone = models.CharField(max_length=50, verbose_name="временная зона")
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
def __str__(self):
return str(self.phone) + ' ' + str(self.tags) if self.tags else str(self.phone)
Документация Swagger: swagger documentation
Что я пробовал:
- read_only in field делает это поле не записываемым по to_internal_value .
- исключение поля из полей делает то же самое
- вы не можете использовать другой сериализатор, потому что вам все равно придется исключить поле для запроса
Заранее спасибо!
#To exclude the mobile_operator_code field from the request documentation in drf_yasg, you can specify the fields attribute in the Meta class of the ClientSerializer to include only the fields that should be included in the request documentation. For example, you could do something like this:
class ClientSerializer(serializers.ModelSerializer):
tags = ClientTagsField(required=False)
mobile_operator_code = serializers.CharField(required=False)
class Meta:
model = Client
fields = ('phone', 'tags', 'timezone')
def to_internal_value(self, data):
data_overriden = data.copy()
if 'phone' in data:
data_overriden['mobile_operator_code'] = get_operator_code_from_phone(data['phone'])
return super().to_internal_value(data_overriden)
#This will tell drf_yasg to only include the phone, tags, and timezone fields in the request documentation, and exclude the mobile_operator_code field.