【问题标题】:WritableField field_from_native returned value not used in Serializer序列化程序中未使用 WritableField field_from_native 返回值
【发布时间】:2014-01-22 09:50:19
【问题描述】:

也许这不是问题,但只是我不太了解如何使用您的框架(这是我第一次使用 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',)

in out DB 约束是这样的:

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

field_from_native 方法被正确调用,它正在返回(我已经检查过)我希望它返回的值。 问题是返回的值没有在使用 JsonField 的 Serializer 中使用。

如果我只是实现from_native(但我需要使用field_from_native),它会按预期完美运行。

你能解释一下为什么吗?

【问题讨论】:

  • 你能告诉我们,你如何使用这个字段..
  • 我已经用更多信息更新了这个问题

标签: python django django-rest-framework


【解决方案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。编码/解码字段数据的逻辑应该嵌入到模型中,而不是序列化器中。

【讨论】:

  • 感谢您的回答。我使用 django-json-field 解决了这个问题 :)
猜你喜欢
  • 1970-01-01
  • 2022-12-19
  • 2021-12-31
  • 2013-03-29
  • 2023-01-27
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多