django - 如何使用嵌套关系和包含嵌套关系的序列化程序来序列化字段?
问题描述
我正在开发带有可写嵌套序列化程序的 django rest 框架。使用文档(https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers)我可以使用序列化器作为字段来建立嵌套关系。
我的问题来了。当我尝试使用序列化程序作为字段进行嵌套关系时,当此序列化程序也具有嵌套关系时,出现以下错误。
TypeError: 禁止直接赋值给相关集合的反面。请改用 info_object.set()。
这是我的序列化程序的一部分:
class BuildMessageSerializer(serializers.ModelSerializer):
class Meta:
model = models.BuildMessageInfo
fields = '__all__'
class BuildSerializer(serializers.ModelSerializer):
info_object = BuildMessageSerializer(
many=True,
required=False,
allow_null=True)
class Meta:
model = models.Build
fields = '__all__'
def create(self, validated_data):
infos_result = validated_data.pop('info_object')
build_res = models.Build.objects.create(**validated_data)
for info_result in infos_result:
models.BuildMessageInfo.objects.create(
build_res=build_res,
**info_result)
build_res.labels.set(infos_result)
return build_res
class JobResultSerializer(serializers.ModelSerializer):
class Meta:
model = models.JobResult
fields = '__all__'
class JobBuildResult(JobResultSerializer):
build_result = BuildSerializer(many=True)
def create(self, validated_data):
builds_data = validated_data.pop('build_result')
job_result = models.JobResult.objects.create(**validated_data)
for build_data in builds_data:
models.Build.objects.create(job_result=job_result,**build_data)
return job_result
您可以在此处找到我的单元测试的有效负载:
self.build_payload = {
'daily_key': '365v4a9e8fv4s9efb8',
'computer': 'SOPBAMBOO01',
'branch_name': 'branch',
'plan_key': 'key',
'build_number': 25,
'pull_request': False,
'build_result': [
{
'name': 'app',
'project': 'ble',
'platform': 'board',
'mode': 'release',
'os': 'bm',
'ide': 'iar',
'result': 'pass',
'warning': 0,
'error': 0,
'info_object': [
{
'message_type': 'message',
'message': 'message',
'log_link': 'message'
}
]
}
]
}
我不知道如何处理这个错误。我是 django 的新手,我也不明白使用 info_object.set() 的错误是什么意思
谢谢你的帮助
解决方案
推荐阅读
- google-sheets - 测试单元格值是否在数组公式的区间内
- google-bigquery - 如何从 bigquery 将 gzip 压缩的 json 文件上传到 gcs 存储桶
- javascript - 使用应用程序脚本将表格图表从谷歌电子表格发送到松弛
- python - 开发回合制战斗系统的问题
- html - Flexbox space-between 均匀的项目分布
- django - 有没有办法从 django admin 动态添加 html 文件?
- angular - 更新 Angular 响应式表单中的验证器
- istio - 带有网状网关的 Istio VirtualService 委托
- assembly - 嘿,我有一个关于 BSS 和 DATA 部分的问题
- windows - Windows主机的docker中的蓝牙