Hie*_*han 20 django django-rest-framework
我正在使用django rest框架,只是创建一个这样的简单序列化器:
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误:
KeyError at /cerberus/packages/
'id'
Run Code Online (Sandbox Code Playgroud)
为什么我不能将主键'id'作为序列化数据的一部分?谢谢你的帮助!
Tom*_*tie 54
HyperlinkedModelSerializerid默认情况下不包括.在2.2及更早版本中,您需要将其明确添加为字段...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field()
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
Run Code Online (Sandbox Code Playgroud)
从2.3开始,您只需在fields选项中添加"id"即可...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id', 'url', 'title','location')
Run Code Online (Sandbox Code Playgroud)
从3.x开始,您必须使用ReadOnlyField()而不是Field()如果您想明确添加它而不使用fields选项...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Package
Run Code Online (Sandbox Code Playgroud)
rom*_*mor 12
默认隐式生成的 id 字段被标记为 read_only。这会导致它在更新时被删除。
因此,如果您需要id更新方法中的字段,则不得将其声明为只读,而应使用读写字段:
class PackageSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我只是通过创建此类对其进行了调整,使其更具可插入性:
class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
"""Extend the HyperlinkedModelSerializer to add IDs as well for the best of
both worlds.
"""
id = serializers.ReadOnlyField()
Run Code Online (Sandbox Code Playgroud)
然后,只需使用它来制作序列化器即可。
| 归档时间: |
|
| 查看次数: |
25146 次 |
| 最近记录: |