Является ли антипаттерном использование `request.POST или None` для инициализации формы Django?

Я наткнулся на запись в блоге, в которой утверждается, что следующее является антипаттерном:

def some_view(request):
    form = MyForm(request.POST or None)
    # …

Источник: https://www.django-antipatterns.com/antipattern/using-request-post-or-none.html

Однако я не совсем понимаю, какие проблемы может вызвать его использование. Я использовал это для сохранения лаконичности моих представлений, не замечая никакого неожиданного поведения.

Является ли это антипаттерном? Если да, то почему?

На сайте объясняется, почему это проблематично:

Это означает, что даже если это POST запрос, он примет значение None, и поэтому в результате форма не будет ограничена.

В этом можно убедиться, если порыться в исходниках. Первым аргументом инициализатора формы является data, а инициализатор содержит эту строку:

self.is_bound = data is not None or files is not None

Как уже упоминалось, если data является None, форма не будет считаться связанной. Это приводит к тому, что форма никогда не будет считаться действительной:

def is_valid(self):
    """Return True if the form has no errors, or False otherwise."""
    return self.is_bound and not self.errors

Это было бы проблематично, если вы делаете надлежащую валидацию на форме после.

Вернуться на верх