WritableField field_from_native返回值未在Serializer中使用

时间:2014-01-22 09:50:20

标签: python django django-rest-framework

也许这不是问题但是我只是不清楚如何使用你的框架(这是我第一次使用python,django和rest_framework)。

我创建了一个简单的serializers.WritableField

 class JsonField(serializers.WritableField):
    def to_native(self, value):
        return json.loads(value)

    def field_from_native(self, data, files, field_name, reverted_data):
        return json.dumps(data.get(field_name, '{}'))

这个JsonField的用法如下:

class QuestionCreationSerializer(serializers.ModelSerializer):
    constraints = JsonField(required=False)

    class Meta:
        model = Question
        exclude = ('group',)
在数据库约束中的

是这样的:

constraints = models.CharField(max_length=1024, default='{}', blank=True)

方法field_from_native被正确调用,它正在返回(我已经检查过)我想要它返回的值。 问题是返回的值不会在使用JsonField的Serializer中使用。

相反,如果我只是实施from_native(但我需要使用field_from_native),那么它可以完美地运作。

你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:1)

您无法从field_from_native返回值,您可以这样做:

def field_from_native(self, data, files, field_name, into):
    into[field_name] = json.dumps(data.get(field_name, '{}'))

这应该按预期工作。虽然我建议您改用django-json-field。编码/解码字段数据的逻辑应嵌入模型中,而不是串行器。