Django rest framework override метод save()
Когда я переопределяю метод save(), внутри вызывается метод create(), но когда я добавляю поле uuid, доступное только для чтения, поле не сериализуется. serializer.py
class AwsUploadFileSerializer(serializers.ModelSerializer):
extract_file_name = serializers.CharField(source='extract_file.name', read_only=True)
class Meta:
model = ExtractAWSFile
fields = [
'uuid',
'extract_file',
'extract_file_name'
]
extra_kwargs = {
'extract_file': {'write_only': True}
}
def save(self, **kwargs):
instance: ExtractAWSFile = super().create(self.validated_data)
res = upload_file_to_aws(instance.extract_file.path)
if not res:
instance.extract_file.delete()
instance.delete()
return instance
ответ
{
"extract_file_name": "tets3.jpg"
}
Я пытаюсь вызвать метод save() родительского класса, чтобы сериализовать поле uuid, но что-то не так с полем имени файла, которое я написал ранее, и оно принимает путь вместе с ним вместо того, чтобы просто отображать имя. serializer.py
class AwsUploadFileSerializer(serializers.ModelSerializer):
extract_file_name = serializers.CharField(source='extract_file.name', read_only=True)
class Meta:
model = ExtractAWSFile
fields = [
'uuid',
'extract_file',
'extract_file_name'
]
extra_kwargs = {
'extract_file': {'write_only': True}
}
def save(self, **kwargs):
instance = super().save(**kwargs)
res = upload_file_to_aws(instance.extract_file.path)
if not res:
instance.extract_file.delete()
instance.delete()
return instance
ответ
{
"uuid": "c4aea74e-3748-4c05-8d6c-2413b1eebcc6",
"extract_file_name": "extractAWS/2022/10/08/tets3.jpg"
}
Почему так? Мне интересно, что я должен сделать после save(), чтобы правильно отобразить поле uuid
def save(self, **kwargs):
res = upload_file_to_aws(instance.extract_file.path)
if not res:
instance.extract_file.delete()
instance.delete()
instance = super().save(**kwargs) #call the save method end of your code