在Django的REST框架串行id字段(id field in django rest frame

2019-07-20 08:17发布

我使用Django的REST框架,只是创建一个简单的串行这样的:

class PackageSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Package
        fields = ('id', 'url', 'title','location')

不过,我得到这个错误:

KeyError at /cerberus/packages/
'id'

为什么我不能让主键“身份证”作为我的序列化数据的一部分吗? 感谢您的帮助!

Answer 1:

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


Answer 2:

我只是调整了这个让它多了几分可插拔通过创建这个类:

class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
    """Extend the HyperlinkedModelSerializer to add IDs as well for the best of
    both worlds.
    """
    id = serializers.ReadOnlyField()

然后,就用它来使你的序列化,你对你的方式。



文章来源: id field in django rest framework serializer