我想在 Django 模型。
我的代码是这样的:
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
然后我没有得到错误,我可以发布数据。
我不喜欢在 Person 类上创建虚拟方法来解决此错误的想法。是否有 django-rest-framework 方法来缓解我错过的这个错误?
请您参考如下方法:
你可以这样做,使用 SerializerMethodField :
class PersonSerializer(serializers.ModelSerializer):
foo = serializers.SerializerMethodField()
...
def get_foo(self, obj):
return 'the foo'
那么关于如何序列化附加字段的逻辑就存在于序列化程序本身,但是如果需要,它确实可以通过 obj 访问实例。
