From 809d5a127aedcc2ac90312bd0baa3cf371026248 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sat, 8 Nov 2025 22:49:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D1=81=20formset=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B5=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблемы: - Отображались лишние пустые формы (extra=1) - Новые формы не инициализировали Select2 корректно - Неудобное удаление через checkbox Исправления: 1. forms.py: - Изменен OrderItemFormSet: extra=0, min_num=0 - Формы добавляются только через JavaScript 2. order_form.html: - Добавлен шаблон пустой формы (#empty-form-template) - Заменен checkbox "Удалить" на кнопку с иконкой - Полностью переписана логика добавления/удаления форм - Добавлена валидация: нельзя удалить единственную позицию - Скрытые формы (DELETE=true) визуально помечаются - Автодобавление первой формы при пустом formset - Валидация перед отправкой: минимум 1 товар Результат: - При создании заказа отображается только 1 пустая форма - Кнопка "Добавить товар" корректно создает новые формы - Select2 работает в каждой новой форме - Кнопка "Удалить" работает корректно - Единственную позицию удалить нельзя 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- myproject/orders/forms.py | 6 +- .../orders/templates/orders/order_form.html | 220 +++++++++++++----- 2 files changed, 159 insertions(+), 67 deletions(-) diff --git a/myproject/orders/forms.py b/myproject/orders/forms.py index a08464b..65ad298 100644 --- a/myproject/orders/forms.py +++ b/myproject/orders/forms.py @@ -149,10 +149,10 @@ OrderItemFormSet = inlineformset_factory( Order, OrderItem, form=OrderItemForm, - extra=1, # Одна пустая форма для добавления + extra=0, # Без пустых форм (будем добавлять через JavaScript) can_delete=True, - min_num=1, # Минимум 1 товар в заказе - validate_min=True, + min_num=0, # Минимум 0 товаров (валидация на уровне бизнес-логики) + validate_min=False, ) diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index a6bd473..5d66b76 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -3,6 +3,21 @@ {% block title %}{{ title }}{% endblock %} +{% block extra_css %} + +{% endblock %} + {% block content %}
@@ -222,16 +237,15 @@
- {% if formset.can_delete %}
-
- {{ item_form.DELETE }} - -
+ + {% if formset.can_delete %} + {{ item_form.DELETE }} + {% endif %} +
- {% endif %}
{% if item_form.errors %} @@ -240,7 +254,58 @@ {% endfor %} - + + + + + + +