Django REST Framework:如何使POST时需要Id字段,即非只读字段?

Bor*_*kov 4 django django-rest-framework

我有一个模型,其中我已将id重写为CharField和主键。这是模型及其序列化器:

class Tool(models.Model):
    id = models.CharField(max_length=10000, primary_key=True, default=uuid.uuid4, editable=False)
    description = models.TextField(null=True, blank=True)
    ...

class ToolSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Tool
        fields = (
            'id',
            'description',
            ...
        )
Run Code Online (Sandbox Code Playgroud)

默认情况下,Django REST Framework将id字段标记为只读,并且在POST请求时不需要此字段。但是我希望它是可写的,并且在POST时要求它。我该如何实现?

Bor*_*kov 5

我认为,我在DRF文档的意外位置找到了答案:

http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update

我需要id像这样在序列化器中创建一个显式字段:

class ToolSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.CharField()

    class Meta:
        model = Tool
        fields = (
            'id',
            'description',
            ...
        )
Run Code Online (Sandbox Code Playgroud)

这将覆盖默认ID字段,该字段以只读方式创建。

  • @KarinaKlinkevičiūtė刚刚偶然发现了创建可写“id”字段的另一个原因:在ListSerializers上实现更新:http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update (2认同)