DRF,更新嵌套序列化程序中的单个字段

时间:2016-06-17 12:53:28

标签: django django-models django-rest-framework

这些是我的模特:

class ADS(models.Model):

    advertiser = models.ForeignKey(User)
    campaign = models.ForeignKey(Campaign, related_name="ads")
    headline = models.CharField(max_length=50)
    description_1 = models.TextField(blank=True)
    description_2 = models.TextField(blank=True)
    display_url = models.URLField(blank=True)
    final_url = models.URLField(blank=True)
    mobile_url = models.URLField(blank=True)

    class Meta:
        db_table = "ads"

和:

class AdsImages(models.Model):

    ads = models.ForeignKey(ADS,blank=True, null=True)
    image = models.ImageField(upload_to='images/',default='media/None/no-img.jpg')

    class Meta:
        db_table = "ads_images"

我有一个嵌套的序列化程序,因为你可以看到第二个模型是一个带图像的表,所以我通过AngularJs异步上传图像。你可以看到ForeignKey(ADS, blank=True, null=True),所以我没有第一次填写它。我的问题是如何在广告字段之后更新。

这是我的序列化器:

class AdsImagesSerializer(serializers.ModelSerializer):

   image = serializers.ImageField(use_url=True,allow_empty_file=True)

   class Meta:
       model = AdsImages
       fields = ('id','image','ads',)

class ADSerializer(serializers.ModelSerializer):

    adsImages = AdsImagesSerializer(many=True)

    class Meta:
        model = ADS
        fields = ('headline','description_1','description_2','display_url','final_url','mobile_url','advertiser','adsImages',)

1 个答案:

答案 0 :(得分:1)

部分更新 默认情况下,序列化程序必须传递所有必填字段的值,否则会引发验证错误。您可以使用partial参数以允许部分更新

# Update `comment` with partial data
serializer = CommentSerializer(comment, data={'content': u'foo bar'}, partial=True)