在Django模型上不存在的django-rest-framework Serializer上定义一个任意字段

时间:2016-08-04 00:16:43

标签: python django rest django-rest-framework

我想在Django {{1}上不存在的 django-rest-framework Field上定义任意Serializer }}

我的代码如下:

Model

此代码失败:

class Person(models.Model):
    pass

class PersonSerializer(serializers.ModelSerializer):

    foo = serializers.CharField()

    class Meta:
        model = Person
        fields = ('id', 'foo')

class PersonViewSet(viewsets.ModelViewSet):

    queryset = Person.objects.all()
    serializer_class = PersonSerializer

但是......如果我将AttributeError: Got AttributeError when attempting to get a value for field `key` on serializer `PersonSerializer`. The serializer field might be named incorrectly and not match any attribute or key on the `Person` instance. Original exception text was: 'Person' object has no attribute 'key'. 类调整为:

Person

然后我没有收到错误,我可以发布数据。

我不喜欢在class Person(models.Model): def foo(self): pass 类上创建虚拟方法来解决此错误。是否有 django-rest-framework 方法来缓解我错过的错误?

1 个答案:

答案 0 :(得分:1)

你可以这样做,使用SerializerMethodField

class PersonSerializer(serializers.ModelSerializer):

    foo = serializers.SerializerMethodField()

    ...

    def get_foo(self, obj):
        return 'the foo'

然后,关于如何序列化附加字段的逻辑只存在于序列化程序本身,但是如果需要,它可以通过obj访问实例。