J'utilise un framework de repos Django et je viens de créer un sérialiseur simple comme celui-ci:
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
Cependant, j'obtiens cette erreur:
KeyError at /cerberus/packages/
'id'
Comment se fait-il que je ne puisse pas obtenir l'identifiant de clé primaire dans mes données sérialisées? Merci pour ton aide!
HyperlinkedModelSerializer
n'inclut pas la id
par défaut. Dans les versions 2.2 et antérieures, vous devrez l'ajouter explicitement en tant que champ ...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field()
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
À partir de la version 2.3, vous pouvez simplement ajouter "id" à l'option fields
...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
À partir de la version 3.x, vous devez utiliser ReadOnlyField()
au lieu de Field()
si vous souhaitez l'ajouter explicitement et ne pas utiliser l'option fields
...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Package
J'ai juste modifié cela pour le rendre un peu plus connectable en créant cette classe:
class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
"""Extend the HyperlinkedModelSerializer to add IDs as well for the best of
both worlds.
"""
id = serializers.ReadOnlyField()
Ensuite, utilisez-le pour créer votre sérialiseur et vous êtes prêt.