我有以下型号:
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记录链接起来?
答案 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]}