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



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

我认为序列化器中的create方法是保存模型实例的地方。但在我看来,从最初的创建方法复制和传递所有代码似乎有点过分。

我不想简单地重写这个方法,因为那样的话,我很有可能会丢失一些验证或其他东西。

所以有任何方法来扩展创建方法使用super()为例?

这是我的模型:

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

事先谢谢你!

在您的序列化器中,您可以这样做并调用default create:

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)

最新更新