也许这不是问题但是我只是不清楚如何使用你的框架(这是我第一次使用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
),那么它可以完美地运作。
你能解释一下为什么吗?
答案 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。编码/解码字段数据的逻辑应嵌入模型中,而不是串行器。