django-rest-framework:DATA 的序列化器不更新模型 ID

StE*_*rMi 1 django django-rest-framework

我有一个像这样的简单序列化器:

class CategoryCreationSerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
Run Code Online (Sandbox Code Playgroud)

类别有一个 id 字段(Django 主键),我不明白为什么序列化器不更新它。

场景:我有一个具有给定类别的 BlogPost。我正在使用不同的类别(已在数据库中创建)更新 BlogPost。因此,POST 请求将包含所有 BlogPost 信息以及带有更新后 ID 的新类别 JSON 对象:

{
    "id": 1,
    "title": "My first blog post",
    "category": {
        "id": 3,
        "name": "Techology"
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我这样做时:

category_data = data.get('category')
    if category_data is not None:
        category_serializer = CategoryCreationSerializer(data=category_data)
        if category_serializer.is_valid():
            blog_post.category = category_serializer.object
Run Code Online (Sandbox Code Playgroud)

内部类别标题将更新,但 id 字段将为 NONE。你能解释一下为什么吗?

干杯,埃马努埃莱。

Kev*_*own 5

默认情况下,idDjango REST Framework 自动生成的字段是只读的。因此,将始终为空,如果尚未附加,id它将尝试创建一个新的。Category

您可以通过将自己的id字段添加到非只读的序列化器来覆盖此设置。

class CategoryCreationSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField()

    class Meta:
        model = Category
Run Code Online (Sandbox Code Playgroud)