序列化器validated_data中的Django JSON字段为None

时间:2019-02-01 17:26:39

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

我有一个看起来像这样的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,实际上具有值I' m传递请求。

我想知道我是在做错什么,还是DRF不支持对序列化器中的JSON字段进行验证,只是希望您在信号中这样做。这似乎是错误的。

1 个答案:

答案 0 :(得分: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)