Документы 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>
.