2017-02-22 6 views
0

Как установить значение false для поля сериализатора JSON для рамки django? Вроде бы соблюдение проверки независимо от требуемого флага:Django Rest Framework JSON Сериализатор с ошибкой проверки с обязательным = False и не по умолчанию?

сериализатору поле

results = serializers.JSONField(required=False, label='Result') 

модель поля

results = models.TextField(blank=True, default="") 

Но когда я отправить форму с пустым входом, я получаю:

"results": [ 
    "Value must be valid JSON." 
], 

Я также попытался изменить модель по умолчанию на {} как в поле модели, так и в поля сериализатора, но имеют тот же ответ.

UPDATE

Благодаря @Linovia за указание на то, что «Нужная флаг означает, что сериализатору не будет жаловаться, если это поле нет»

После некоторого копания, это выглядит DRF устанавливает на вход значение по умолчанию null, которое затем считается недействительным ... Как я могу переопределить это, поскольку атрибут «default» сериализатора, похоже, не имеет никакого эффекта.

"results": null, 
+0

в использовании models.textfield нуль = истина – Darshan

+0

@Darshan это плохая идея, вам не нужны нулевые значения в 'TextField',' пустым = True' достаточно. –

+0

Вам не нужно значение по умолчанию, например пустая строка, потому что 'blank = True' делает это за вас. На самом деле это странная логика, зачем вам 'JSONField' поверх' TextField'? вы всегда можете сохранить строку 'JSON' в виде обычного текста. Если вы используете postgres и хотите бинарный формат, используйте 'JSONField' в своей модели. Но ваш код должен работать, можете ли вы добавить модель и сериализатор, о которых идет речь. –

ответ

3

Флаг required это означает, что сериализатор не будет жаловаться, если это поле не присутствует. Однако, если он присутствует, он будет следовать процессу проверки. Это вовсе не означает, что он будет отброшен, если он не подтвердит.

+0

Несомненно, но как разрешить поле быть дополнительным? Кажется, что установка обязательна = False на сериализаторе.CharField (или вообще опускание) позволяет мне отправить форму без значения, но я не могу сделать то же самое для serializer.JSONField? – Liz

+0

Вы можете изменить название вопроса, поскольку оно вводит в заблуждение и обновляет ваш вопрос с большим контекстом. То, что вы упомянули здесь, полностью меняет первоначальный вопрос. – Linovia

+0

Я обновил свой ответ ранее с дополнительной информацией. Похоже, что атрибут значения по умолчанию для полей сериализатора JSON не имеет никакого эффекта и вместо этого установлен в значение null, что не позволяет выполнить проверку. – Liz

0

вы можете использовать синтаксис что-то вроде ...

class DetailSerializer(serializers.ModelSerializer): 
results = ResultSerializer(

     allow_empty_file=True,required=False 
    )