0

我正在尝试创建一个 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 中并且显然不为空。

4

0 回答 0