我想在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 方法来缓解我错过的错误?
答案 0 :(得分:1)
你可以这样做,使用SerializerMethodField
:
class PersonSerializer(serializers.ModelSerializer):
foo = serializers.SerializerMethodField()
...
def get_foo(self, obj):
return 'the foo'
然后,关于如何序列化附加字段的逻辑只存在于序列化程序本身,但是如果需要,它可以通过obj
访问实例。