Fix: дата при открытии формы (format YYYY-MM-DD), без лишней пустой строки при редактировании (extra=0)
Made-with: Cursor
This commit is contained in:
10
HISTORY.md
10
HISTORY.md
@@ -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 – Сохранение заказа: дата и табличная часть
|
||||
|
||||
**Проблема**: При сохранении заказа клиента не сохранялись поле «Дата» и табличная часть (товары).
|
||||
|
||||
@@ -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}),
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user