Django rest框架使用外键保存序列化器

时间:2021-01-29 13:48:53

标签: python django django-rest-framework

快速问题我正在尝试保存模型并进行以下设置

models.py

class Example1(models.Model):
    field1 = models.CharField(max_length=90, null=True, blank=True)

class Example2(models.Model):
    field2 = models.CharField(max_length=90, null=True, blank=True)
    example1 = models.ForeignKey(Example1, on_delete=models.CASCADE, related_name='example1_example2')

serializers.py

class Example1Serializer(serializers.ModelSerializer):
    def create(self, validated_data):
        return Example1.objects.create(**validated_data)

    class Meta:
        model = Example1
        fields = ['id', 'field1']

class Example2Serializer(serializers.ModelSerializer):
    def create(self, validated_data):
        return Example2.objects.create(**validated_data)

    class Meta:
        model = Example2
        fields = ['id', 'example1', 'field2']

在启动以下代码时

new_example1 = Example1Serializer(data=JSONEXAMPLE1DATA)
if new_example1.is_valid():
    new_example1.save()

    **works well**

JSONEXAMPLE2DATA = {
    'field2' = 'test',
    'example1' = new_example1.data['id']
}

new_example2 = Example2Serializer(data=JSONEXAMPLE2DATA)
if new_example2.is_valid():
    new_example2.save()

**doesnt work gives must be a "Example1" instance**

JSONEXAMPLE2DATA 更改为

JSONEXAMPLE2DATA = {
    'field2' = 'test',
    'example1' = new_example1
}

给出 Incorrect type. Expected pk value, received Example1Serializer.

设置有误吗?

1 个答案:

答案 0 :(得分:0)

而不是使用这个:

JSONEXAMPLE2DATA = {
    'field2' = 'test',
    'example1' = new_example1.data['id']
}

使用这个:

JSONEXAMPLE2DATA = {
    'field2' = 'test',
    'example1' = Example1.objects.get(id=new_example1.data['id'])
}

希望这会奏效;)