id field in django rest framework serializer
I just tweaked this to make it a little more pluggable by creating this class:
class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
"""Extend the HyperlinkedModelSerializer to add IDs as well for the best of
both worlds.
"""
id = serializers.ReadOnlyField()
Then, just use that to make your serializer and you're on your way.
HyperlinkedModelSerializer
doesn't include the id
by default. In 2.2 and earlier you'll need to add it explicitly as a field...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field()
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
From 2.3 onwards, you can simply add 'id' to the fields
option...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
From 3.x (< 3.3) onwards, you must use ReadOnlyField()
instead of Field()
if you want to add it explicitly and not use the fields
option...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Package
According to the Django Rest Framework Documentation:
The default implicitly-generated id field is marked as read_only. This causes it to be removed on updates.
Thus, if you need the id
field in an update method, you must not declare it as read-only but use a read-write field instead:
class PackageSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()