我有一个看起来像这样的Django模型:
class Foo:
data = JSONField(encoder=DjangoJSONEncoder, default=dict)
我有相应的序列化器,它很基本:
class FooSerializer(BaseSerializer):
class Meta:
model = models.Foo
fields = '__all__'
我想要做的是对序列化器中的JSON字段进行一些验证。我尝试通过覆盖validate
和create
函数来做到这一点,但是在两种情况下,attrs.data
或validated_data.data
的值都是None
。
怪异的部分是,如果我在pre-save
或post-save
信号中创建相同的验证,则instance.data
的值不是None
,实际上具有值I' m传递请求。
我想知道我是在做错什么,还是DRF不支持对序列化器中的JSON字段进行验证,只是希望您在信号中这样做。这似乎是错误的。
答案 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)