【问题标题】:Django JSON field in Serializer validated_data is None序列化程序验证数据中的 Django JSON 字段为无
【发布时间】:2019-02-01 17:26:39
【问题描述】:

我有一个看起来像这样的 Django 模型:

class Foo:
  data = JSONField(encoder=DjangoJSONEncoder, default=dict)

我有相应的序列化程序,它非常基本:

class FooSerializer(BaseSerializer):

  class Meta:
    model = models.Foo
    fields = '__all__'

我想做的是在序列化程序中对那个 JSON 字段进行一些验证。我尝试通过覆盖validatecreate 函数来做到这一点,但在这两种情况下attrs.datavalidated_data.data 的值都是None

奇怪的是,如果我在 pre-savepost-save 信号中创建相同的验证,那么 instance.data 的值不是 None 并且实际上具有我在请求中传递的值。

我想知道我是否做错了什么,或者 DRF 是否不支持对序列化程序中的 JSON 字段进行验证,只是希望您在信号中进行验证。这似乎有点不对劲。

【问题讨论】:

    标签: django django-rest-framework django-signals django-serializer django-jsonfield


    【解决方案1】:

    您可以将自定义验证器作为参数传递

     class Foo(models.Model):
         data = JSONField(encoder=DjangoJSONEncoder, default=dict,validators=[validate_json])
    

    或在 TextField 中简单,如

    class Foo(models.Model):
        data = models.TextField(default={},validators=[validate_json])
    

    并将 validate_json 定义为

    import json
    from rest_framework.serializers import ValidationError
    def validate_json(value):
        #your custom validations here
        try:
            json.loads(value) 
        except:
            raise ValidationError(u'%s is not an Valid Json - ' % value)
    

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 1970-01-01
      • 2020-09-29
      • 2014-11-25
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2014-11-20
      相关资源
      最近更新 更多