Поле JJJ Django в Serializer validated_data - Нет - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть модель 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 Ответ

0 голосов
/ 01 февраля 2019

Вы можете передать пользовательские валидаторы как 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)
...