如何在模型序列化程序中正确扩展 Create 方法?

How to properly extend Create method in Model Serializer?

所以我想在保存对象的过程中为模型字段添加一些信息。 例如我想上传一张图片,它应该是唯一必填字段,所以我希望在保存实例期间填写其余字段(例如宽度、高度、名称等)。

我认为序列化程序中的创建方法是保存模型实例的地方。 但在我看来,复制并粘贴初始创建方法中的所有代码似乎有点过分。

我不想简单地覆盖该方法,因为在那种情况下,我很可能会丢失一些验证或其他东西。

那么有什么方法可以使用 super() 来扩展 create 方法吗?

这是我的模型:

class ImageUpload(models.Model):

    name = models.CharField(max_length=150, default='test')
    url = models.URLField(default='None')
    picture = models.ImageField(upload_to='images/')
    width = models.IntegerField()
    height = models.IntegerField()
    parent_picture = models.IntegerField(default=0)

这是我的观点:

class UploadImageView(generics.CreateAPIView):
    serializer_class = ImageUploadSerializer

这是我的序列化器:

class ImageUploadSerializer(serializers.ModelSerializer):
    class Meta:
        model = ImageUpload
        fields = '__all__'

    def create(self, validated_data):
        name = 'SomeName'
        width = 'Width of the uploaded image'
        height = 'Height of the uploaded image'
        super().create(validated_data)
        instance = ImageUpload.objects.create(**validated_data, name=name, width=width, height= height)
        return instance

先谢谢你!

在您的序列化程序上,您可以执行此操作并调用默认创建:

class ImageUploadSerializer(serializers.ModelSerializer):
    class Meta:
        model = ImageUpload
        fields = '__all__'

    def create(self, validated_data):
        validated_data['name'] = 'SomeName'
        validated_data['width']= 120
        validated_data['height']= 120
        return super().create(validated_data)