Каковы минимальные параметры, необходимые для безопасного пустого поля M2M в полях сериализатора DRF? - PullRequest
0 голосов
/ 03 октября 2018

Существует четыре опции: required, allow_empty, allow_null и allow_blank в полях сериализатора DRF.Чтобы разрешить пустое поле M2M (Many-To-Many), является ли безопасным иметь только allow_empty как True или нужно также координировать другие варианты?Кроме того, что требуется для наоборот?

djangorestframework == 3.8.2

1 Ответ

0 голосов
/ 03 октября 2018

Документы Django-rest-framework говорят:

<b>allow_blank</b> - Если установлено значение <b>True</b>, тогда пустая строка должна считаться допустимым значением.Если установлено значение <b>False</b>, тогда пустая строка считается недействительной и вызовет ошибку проверки.По умолчанию <b>False</b>.

<b>allow_null</b> делает то же самое.Но его использование не рекомендуется в пользу <b>allow_blank</b>.Допустимо установить оба значения <b>allow_blank=True</b> и <b>allow_null=True</b>, но это означает, что для представлений строк будет два различных типа пустых значений, которые могут привести к несогласованности данных и незначительным ошибкам приложения.

<b>allow_blank</b> должно быть предпочтительным для текстового выбора, а <b>allow_null</b> должно быть предпочтительным для числового или другого нетекстового выбора.

<b>allow_empty</b> атрибут был добавлен из django-rest-framework 3.2.x

<b>allow_empty</b> используется с <b>ListSerializer</b> или с <b>many=True</b> взаимосвязями.

source: django-rest-framework-docs

И говоря о полях, отличных от <b>ManyToMany</b>, таких как CHarfield или поле выбора, используя <b>allow_blank=True</b> неявно говорит, что это поле не является обязательным.Но с порядком приоритета, если за <b>allow_blank=True</b> следует <b>required=True</b>, тогда поле является обязательным.

Принимая во внимание, что <b>allow_empty</b> явно используется с ListSerializer, чтобы позволить сериализатору принимать пустые списки.По умолчанию это <b>True</b>.Что также говорит, неявно говорит: не требуется.Поэтому можно просто добавить <b>allow_empty=True</b> в поле <b>M2M</b>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...