Поле 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)
Другие вопросы по тегам