字段字段名“test”对模型“Ability”无效



我有一个没有字段'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)

最新更新