我正在尝试创建一个 apiview 以在数据库中添加嵌套 json 的数据。这些型号是:
class Catch(models.Model):
haul = models.ForeignKey('hauls.Haul')
weight = models.IntegerField()
category = models.ForeignKey('species.Category')
class Sex(models.Model):
catch = models.ForeignKey('catches.Catch', related_name='sexes')
sex = models.IntegerField()
class Length(models.Model):
sex = models.ForeignKey('samples.Sex', related_name='lengths')
length = models.IntegerField()
number_individuals = models.IntegerField()
我尝试存储在数据库中的 JSON 是:
{
"catch_id":"6125",
"sex":"2",
"lengths": [
{
"catch_id":"6125",
"length": 24,
"number_individuals": 1
},
{
"catch_id":"6125",
"length": 25,
"number_individuals": 1
},
{
"catch_id":"6125",
"length": 26,
"number_individuals": 1
}
]
}
涉及的序列化程序是:
class LengthSerializer(serializers.ModelSerializer):
class Meta:
model= Length
fields = ['sex_id', 'length', 'number_individuals', ]
class SexCatchSerializer (serializers.ModelSerializer):
lengths = LengthSerializer(many=True)
class Meta:
model = Sex
fields = ['id', 'sex', 'catch_id', 'lengths', ]
# This is a nested serializer, so we have to overwrite the create function
def create(self, validated_data):
# Firstly, get the data from the nested parts
lengths_data = validated_data.pop('lengths')
# Secondly, save the Sex
sex = Sex.objects.create(**validated_data)
# Then, save the nested parts in its own models
Length.objects.create(sex=sex, **lengths_data)
# And finally, return the sex
return sex
django.db.utils.IntegrityError: NOT NULL constraint failed: samples_sex.catch_id
但是返回了一个错误sex = Sex.objects.create(**validated_data)
,我不知道为什么如果 catch_id 字段在 JSON 中并且显然不为空。