如何在模型序列化程序中正确扩展 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)
所以我想在保存对象的过程中为模型字段添加一些信息。 例如我想上传一张图片,它应该是唯一必填字段,所以我希望在保存实例期间填写其余字段(例如宽度、高度、名称等)。
我认为序列化程序中的创建方法是保存模型实例的地方。 但在我看来,复制并粘贴初始创建方法中的所有代码似乎有点过分。
我不想简单地覆盖该方法,因为在那种情况下,我很可能会丢失一些验证或其他东西。
那么有什么方法可以使用 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)