继承模型的序列化器



我有以下声明的模型:

class Parent(models.Model):
    active = models.BooleanField(default=False)
class Child(Parent)
    name = models.CharField(max_length=100, unique=True)

和序列化器:

class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = Child
        fields = ('active', 'name')

一目了然,一切似乎都可以,它是在可浏览的API中正确生成的。当我要更新两个字段时,更新了"活动"。

当我回报时,我会收到正确的响应:

{
  "active": true,
  "name": "foo"
}

但根本没有更新名称字段。我走得更远,试图在序列化器中实现自定义更新方法:

def update(self, instance, validated_data):
    print(str(type(instance)))
    return instance

之后,我只收到一个活跃字段?:

{
  "active": true,
}

和在控制台上更令人惊讶:

rest_1  | <class 'applic.models.Person'>

我完全迷失了:)为什么地球序列化器将明确提供的儿童模型视为一个人?如何迫使儿童审判者开发儿童模型?

预先感谢您Piotr

如下更改您的models.py

class Parent(models.Model):
    active = models.BooleanField(default=False)

class Child(Parent):
    parent = models.OneToOneField(Parent)
    name = models.CharField(max_length=100, unique=True)


并在views.py中尝试ModelViewSet如下,

class YourViewClass(ModelViewSet):
    serializer_class = ChildSerializer
    queryset = Child.objects.all()


假设您的API终点是/api/vi/sample/,则

对于add实例,请在/api/vi/sample/上使用POST方法有效载荷将如下

{
    "active": true,
    "name": "name_choice"
}



对于edit实例,PUT/api/vi/sample/instance_id在CC_11上,其中instance_id是代表Child实例primary key的整数(示例:/api/vi/sample/1(。更新有效载荷如下,

{
    "active": false,
    "name": "name_choice_new_change"
}


如果您想查看instance_id,请如下更新serializer

class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = Child
        fields = ('id', 'active', 'name')

相关内容

  • 没有找到相关文章

最新更新