我使用Django的REST框架,只是创建一个简单的串行这样的:
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
不过,我得到这个错误:
KeyError at /cerberus/packages/
'id'
为什么我不能让主键“身份证”作为我的序列化数据的一部分吗? 感谢您的帮助!
HyperlinkedModelSerializer
不包括id
默认。 在2.2和更早的版本,你需要明确地将其添加为场...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field()
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
从2.3开始,你可以简单地添加“ID”的fields
选项...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
从3.X起,你必须使用ReadOnlyField()
而不是Field()
如果你想明确地添加它,而不是使用fields
选项...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Package
我只是调整了这个让它多了几分可插拔通过创建这个类:
class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
"""Extend the HyperlinkedModelSerializer to add IDs as well for the best of
both worlds.
"""
id = serializers.ReadOnlyField()
然后,就用它来使你的序列化,你对你的方式。