DRF Swagger - параметр конечной точки не соответствует сериализатору
Я пытаюсь создать REST API, используя DRF и Swagger для документации API, но заметил, что параметр пользовательского интерфейса Swagger не соответствует заданному сериализатору. MailSerializer.py `
from main.BusinessLayer.Model.Mails import Mails
from rest_framework import serializers
class MailSerializer(serializers.Serializer):
class Meta:
model = Mails
fields = '__all__'
# Mail Properties
Subject = serializers.CharField(max_length = 30, allow_blank = False)
Sender = serializers.CharField(max_length = 30, allow_blank = False)
Recipients = serializers.CharField(allow_blank = False)
ReplyToAddress = serializers.CharField(max_length = 30)
Importance = serializers.CharField(max_length = 30, allow_blank = False)
ApplicationId = serializers.CharField(max_length = 30, allow_blank = False)
# Mail Content
Body = serializers.CharField(allow_blank = False)
Attachments = serializers.CharField(allow_blank = False)
# Other Parameters
UseDefaultHeader = serializers.IntegerField(default = 0)
UseDefaultFooter = serializers.IntegerField(default = 0)
def create(self, validated_data):
return Mails.objects.create(**validated_data)
`
@swagger_auto_schema(
operation_description="",
operation_summary="create a mail",
request_body=MailSerializer
)
def create(self, request, *args, **kwargs):
try:
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return Response({
'code': 200,
'success': True,
'message': '%s successfully created.' % (OBJECT_NAME),
'data': []
}, status= status.HTTP_200_OK)
Я пытался использовать @swagger_auto_schema и параметры request_body, но все равно не работает
Проблема может заключаться в использовании Meta.fields
с немодельным сериализатором, попробуйте изменить это:
class MailSerializer(serializers.Serializer):
to:
class MailSerializer(serializers.ModelSerializer):
allow_blank установленное значение true означает, что пустая строка должна рассматриваться как допустимое значение. Это не означает, что оно не является обязательным.
Попробуйте required, значение по умолчанию True
, поэтому установите required=False