Django休息框架:POST上很多很多

时间:2017-05-12 09:23:49

标签: django serialization django-rest-framework

我有以下型号:

class A(models.Model): 
 b = models.ManyToManyField(B)
 name = model.CharField()

class B(models.Model):
  name = model.CharField()

应用中的网址:

 url(
        r'^A/(?P<pk>[a-f0-9-]+)/B/$',
        AViewSet.as_view({
            'get': 'list',
            'post': 'create',
            'put': 'partial_update',
        }),
        name='A-B',
    ),

A app中的序列化程序:

class ABSerializer(serializers.ModelSerializer):

    class Meta:
        model = A
        extra_kwargs = {
             'id': {'read_only': True},
        }
        fields = (
            'b',
        )

问题是当我使用url在A app上调用POST调用时: A/{idofA}/B并发送以下内容的数据:

{
  b : ["idofexistingB"]
}

我收到的错误是未发送A的必填字段。但是,此设置适用于PUT调用。

PUT调用的问题是,当我再次调用PUT调用时,它会用新数据覆盖AB关系字段中的现有数据,而不是简单地将第二个API调用的数据附加到第一个。

如何发布数据以便能够将现有B记录与A记录链接起来?

1 个答案:

答案 0 :(得分:4)

我曾经使用PrimaryKeyRelatedField解决了许多django中的字段问题。它假定字段的值作为列表。我希望它对你有所帮助。

class ABSerializer(serializers.ModelSerializer):
    b = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

class Meta:
    model = A
    fields = ('name', 'b')


 {'name': 'test', 'b': [1, 2]}