在django rest框架中保存django模型与数据库的多对多关系

时间:2016-03-21 18:17:39

标签: django django-rest-framework

我需要能够在api端点上发布帖子来保存广告组模型。该模型有多个字段。我知道我需要覆盖create()方法。但是我被困在哪里。传入的请求数据将具有其他模型(广告素材)的ID。此ID已存在于广告素材表格中。

Django创建另一个名为adgroup_creative的表来保存这个M2M关系。我需要在保存这个广告组对象时填充该表。

class AdGroup(models.Model):
    adgroup_name = models.CharField(max_length=200, verbose_name="Name")
    creative = models.ManyToManyField(Creative, verbose_name="Creative")

class Creative(models.Model):
    creative_name= models.CharField(max_length=200, verbose_name="Name", default=0)
    ad_type= models.PositiveIntegerField(max_length=1,verbose_name="Ad Type")

class AdGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = AdGroup
        fields = ('id','adgroup_name','creative')

class CreativeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Creative
        fields = ('id','creative_name')

class AdGroupViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
    queryset = AdGroup.objects.all().order_by('-id')
    serializer_class = AdGroupSerializer

https://codereview.stackexchange.com/questions/46160/django-rest-framework-add-remove-to-a-list

Save a many-to-many model in Django/REST?

1 个答案:

答案 0 :(得分:0)

您应该查看serializer relation documentation

如果您只是使用ID来表示与DRF的M2M关系,那么您不需要任何特殊内容。仅当您打算提供不存在的相关对象或使用嵌套序列化程序时,您才需要覆盖create / update方法。

在目前的情况下,您不需要嵌套的序列化程序,因为您想提供相关的实例'的ID。