【发布时间】:2015-05-26 11:19:44
【问题描述】:
除了 Xzibit 的笑话,这是我的模型:
from django.db import models
class ProjectProfitAndLoss(models.Model):
pass
class Component(models.Model):
profit_and_loss = models.ForeignKey(ProjectProfitAndLoss, related_name='components')
name = models.CharField(max_length=250)
class ComponentProductionVolume(models.Model):
component = models.ForeignKey(Component, related_name='volumes')
offset = models.IntegerField()
volume = models.DecimalField(max_digits=16, decimal_places=4)
序列化器:
from rest_framework import serializers
class ComponentProductionVolumeSerializer(serializers.ModelSerializer):
class Meta:
model = ComponentProductionVolume
class ComponentSerializer(serializers.ModelSerializer):
volumes = ComponentProductionVolumeSerializer(many=True, allow_add_remove=True)
class Meta:
model = Component
class ProjectProfitAndLossSerializer(serializers.ModelSerializer):
components = ComponentSerializer(many=True, allow_add_remove=True)
class Meta:
model = ProjectProfitAndLoss
我想要做的是将要创建的组件连同它们的 ComponentProductionVolumes 一起发布为列表 - 也作为列表。所以我的 json 看起来像这样:
[
{
"name": "component 1",
"profit_and_loss": 3,
"volumes": [
{
"offset": 0,
"volume": 2
},
{
"offset": 1,
"volume": 3
},
{
"offset": 2,
"volume": 2
},
]
},
{
"name": "component 2"
"profit_and_loss": 3,
"volumes": [
{
"offset": 0,
"volume": 4
},
{
"offset": 1,
"volume": 2
},
{
"offset": 2,
"volume": 5
},
]
}
]
不幸的是,我得到的是一个验证错误:
components: [{volumes:[{component:[This field is required.]},{volumes:[{component:[This field is required.]} ... /* error repeated for each volume sent */ ]}]
如果我理解正确,这个错误会告诉我在我发送的每个卷中都包含组件 ID。但是因为我希望 DRF 连同它们的卷一起创建组件,所以这是不可能的,因为组件还不存在。
让 DRF 创建组件,然后创建 ComponentProductionVolumes 的最佳方法是什么?
【问题讨论】:
标签: django django-rest-framework