Fix: дата при открытии формы (format YYYY-MM-DD), без лишней пустой строки при редактировании (extra=0)

Made-with: Cursor
This commit is contained in:
2026-02-26 13:26:28 +00:00
parent 319f38ea05
commit 8145db86e3
3 changed files with 39 additions and 9 deletions

View File

@@ -1,5 +1,15 @@
# История изменений ERP WaterSurf
## 2025-02-25 23:55 UTC Дата при открытии формы, без лишней пустой строки при редактировании
**Проблема**: При открытии формы редактирования заказа поле «Дата» не подставлялось из БД; в табличной части вместе с существующими строками отображалась лишняя пустая строка.
**Решение**: Для виджета даты (DateInput с type="date") задан явный формат `format="%Y-%m-%d"`, чтобы значение из БД выводилось в виде, ожидаемом HTML5 (YYYY-MM-DD). Для редактирования заказов используются отдельные formset-классы с `extra=0`: при открытии формы показываются только сохранённые строки; новая строка добавляется по кнопке «+ Добавить строку».
**Изменения**: documents/forms.py (format для всех DateInput; CustomerOrderItemFormSetUpdate и SupplierOrderItemFormSetUpdate с extra=0), documents/views.py (импорт и использование *FormSetUpdate в Update-представлениях заказов).
---
## 2025-02-25 23:45 UTC Сохранение заказа: дата и табличная часть
**Проблема**: При сохранении заказа клиента не сохранялись поле «Дата» и табличная часть (товары).

View File

@@ -41,6 +41,15 @@ CustomerOrderItemFormSet = inlineformset_factory(
can_delete=True,
)
CustomerOrderItemFormSetUpdate = inlineformset_factory(
CustomerOrder,
CustomerOrderItem,
form=CustomerOrderItemForm,
fields=("product", "price", "currency", "quantity"),
extra=0,
can_delete=True,
)
SupplierOrderItemFormSet = inlineformset_factory(
SupplierOrder,
SupplierOrderItem,
@@ -50,13 +59,22 @@ SupplierOrderItemFormSet = inlineformset_factory(
can_delete=True,
)
SupplierOrderItemFormSetUpdate = inlineformset_factory(
SupplierOrder,
SupplierOrderItem,
form=SupplierOrderItemForm,
fields=("product", "price", "currency", "quantity"),
extra=0,
can_delete=True,
)
class CustomerOrderForm(forms.ModelForm):
class Meta:
model = CustomerOrder
fields = ("date", "number", "order_kind", "organization", "client", "author")
widgets = {
"date": forms.DateInput(attrs={"type": "date"}),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
}
@@ -66,7 +84,7 @@ class SupplierOrderForm(forms.ModelForm):
model = SupplierOrder
fields = ("date", "number", "organization", "supplier", "currency", "rate", "author")
widgets = {
"date": forms.DateInput(attrs={"type": "date"}),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
}
@@ -76,7 +94,7 @@ class CashInflowForm(forms.ModelForm):
model = CashInflow
fields = ("date", "number", "recipient", "amount", "customer_order", "comment", "author")
widgets = {
"date": forms.DateInput(attrs={"type": "date"}),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
}
@@ -86,7 +104,7 @@ class CashTransferForm(forms.ModelForm):
model = CashTransfer
fields = ("date", "number", "sender", "recipient", "amount", "comment", "author")
widgets = {
"date": forms.DateInput(attrs={"type": "date"}),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
}
@@ -96,6 +114,6 @@ class CashExpenseForm(forms.ModelForm):
model = CashExpense
fields = ("date", "number", "sender", "amount", "supplier_order", "comment", "author")
widgets = {
"date": forms.DateInput(attrs={"type": "date"}),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
}

View File

@@ -18,8 +18,10 @@ from .models import (
from .forms import (
CustomerOrderForm,
CustomerOrderItemFormSet,
CustomerOrderItemFormSetUpdate,
SupplierOrderForm,
SupplierOrderItemFormSet,
SupplierOrderItemFormSetUpdate,
CashInflowForm,
CashTransferForm,
CashExpenseForm,
@@ -81,12 +83,12 @@ class CustomerOrderUpdate(LoginRequiredMixin, UpdateView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx["formset"] = CustomerOrderItemFormSet(instance=self.object)
ctx["formset"] = CustomerOrderItemFormSetUpdate(instance=self.object)
ctx["title"] = "Заказ клиента"
return ctx
def form_valid(self, form):
formset = CustomerOrderItemFormSet(self.request.POST, instance=self.object)
formset = CustomerOrderItemFormSetUpdate(self.request.POST, instance=self.object)
if formset.is_valid():
form.save()
formset.save()
@@ -150,12 +152,12 @@ class SupplierOrderUpdate(LoginRequiredMixin, UpdateView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx["formset"] = SupplierOrderItemFormSet(instance=self.object)
ctx["formset"] = SupplierOrderItemFormSetUpdate(instance=self.object)
ctx["title"] = "Заказ поставщику"
return ctx
def form_valid(self, form):
formset = SupplierOrderItemFormSet(self.request.POST, instance=self.object)
formset = SupplierOrderItemFormSetUpdate(self.request.POST, instance=self.object)
if formset.is_valid():
form.save()
formset.save()