我有以下声明的模型:
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')