Boris Burkov
Boris Burkov

Reputation: 14446

Django REST Framework: how to make Id field required upon POST, i.e. non read-only field?

I've got a model, where I've overridden id as a CharField and primary key. Here's the model and its serializer:

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',
            ...
        )

By default, Django REST Framework marks id field as read-only and doesn't require it upon POST requests. But I want it to be writable and require it upon POST. How do I achieve that?

Upvotes: 7

Views: 4581

Answers (1)

Boris Burkov
Boris Burkov

Reputation: 14446

I think, I found the answer in an unexpected place of DRF documentation:

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

I need to create an explicit id field in serializer like this:

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

    class Meta:
        model = Tool
        fields = (
            'id',
            'description',
            ...
        )

This will override the default id field, created as a read-only.

Upvotes: 12

Related Questions