我有一个没有字段'test'的模型。我在运行时分配这个字段:
ability = Ability.objects.first()
ability.test = 'TEST!!'
我还有序列化器:
class AbilitySerializer(serializers.ModelSerializer):
class Meta:
model = Ability
fields = ('name', 'test',)
当我使用它时:
return Response(AbilitySerializer(ability).data)
我得到错误:
Field Field name `test` is not valid for model `Ability`.
EDIT:当我将对象数组传递给序列化器(many=True)时,我仍然面临这个问题。当我传递单个实例时,它是OK的。
为什么?如何修复?
正如Ajay Gupta所指出的,非模型字段/方法/属性必须显式声明:
class AbilitySerializer(serializers.ModelSerializer):
# read_only since test is not a model field
test = serializers.CharField(read_only=True)
class Meta:
model = Ability
fields = ('name', 'test',)
另外,如果您不总是提供test
,请考虑:
test = serializers.CharField(required=False, read_only=True)