Reputation: 14446
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
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