Bhu*_*hal 2 django serialization django-rest-framework
我有以下型号:
class A(models.Model):
b = models.ManyToManyField(B)
name = model.CharField()
class B(models.Model):
name = model.CharField()
Run Code Online (Sandbox Code Playgroud)
应用程序中的网址:
url(
r'^A/(?P<pk>[a-f0-9-]+)/B/$',
AViewSet.as_view({
'get': 'list',
'post': 'create',
'put': 'partial_update',
}),
name='A-B',
),
Run Code Online (Sandbox Code Playgroud)
A应用程序中的序列化程序:
class ABSerializer(serializers.ModelSerializer):
class Meta:
model = A
extra_kwargs = {
'id': {'read_only': True},
}
fields = (
'b',
)
Run Code Online (Sandbox Code Playgroud)
问题是,当我使用 url 在 A 应用程序上调用 POST 调用时:
A/{idofA}/B
并发送以下数据:
{
b : ["idofexistingB"]
}
Run Code Online (Sandbox Code Playgroud)
我收到未发送 A 的必填字段的错误。但是,此设置适用于 PUT 调用。
PUT 调用的问题在于,当我再次调用 PUT 调用时,它会用新数据覆盖 AB 关系字段中的现有数据,而不是简单地将第二个 API 调用的数据附加到第一个。
如何发布数据以便我能够将现有 B 记录与 A 记录链接?
我曾经使用 PrimaryKeyRelatedField 解决了 Django 中的 manytomany 字段。它假定字段的值以列表形式出现。我希望它会对你有所帮助。
class ABSerializer(serializers.ModelSerializer):
b = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = A
fields = ('name', 'b')
{'name': 'test', 'b': [1, 2]}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3838 次 |
最近记录: |