Поле JJJ Django в Serializer validated_data - Нет
У меня есть модель 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
и на самом деле имеет значение, которое я передаю в запросе.
Мне интересно, если я делаю что-то не так или DRF не поддерживает проверку полей JSON в сериализаторе, и просто ожидаю, что вы сделаете это в сигналах. Это выглядит как-то неправильно.
1 ответ
Вы можете передать пользовательские валидаторы как arugment как
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)