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
|
# История изменений 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 – Сохранение заказа: дата и табличная часть
|
## 2025-02-25 23:45 UTC – Сохранение заказа: дата и табличная часть
|
||||||
|
|
||||||
**Проблема**: При сохранении заказа клиента не сохранялись поле «Дата» и табличная часть (товары).
|
**Проблема**: При сохранении заказа клиента не сохранялись поле «Дата» и табличная часть (товары).
|
||||||
|
|||||||
@@ -41,6 +41,15 @@ CustomerOrderItemFormSet = inlineformset_factory(
|
|||||||
can_delete=True,
|
can_delete=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
CustomerOrderItemFormSetUpdate = inlineformset_factory(
|
||||||
|
CustomerOrder,
|
||||||
|
CustomerOrderItem,
|
||||||
|
form=CustomerOrderItemForm,
|
||||||
|
fields=("product", "price", "currency", "quantity"),
|
||||||
|
extra=0,
|
||||||
|
can_delete=True,
|
||||||
|
)
|
||||||
|
|
||||||
SupplierOrderItemFormSet = inlineformset_factory(
|
SupplierOrderItemFormSet = inlineformset_factory(
|
||||||
SupplierOrder,
|
SupplierOrder,
|
||||||
SupplierOrderItem,
|
SupplierOrderItem,
|
||||||
@@ -50,13 +59,22 @@ SupplierOrderItemFormSet = inlineformset_factory(
|
|||||||
can_delete=True,
|
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 CustomerOrderForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CustomerOrder
|
model = CustomerOrder
|
||||||
fields = ("date", "number", "order_kind", "organization", "client", "author")
|
fields = ("date", "number", "order_kind", "organization", "client", "author")
|
||||||
widgets = {
|
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}),
|
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +84,7 @@ class SupplierOrderForm(forms.ModelForm):
|
|||||||
model = SupplierOrder
|
model = SupplierOrder
|
||||||
fields = ("date", "number", "organization", "supplier", "currency", "rate", "author")
|
fields = ("date", "number", "organization", "supplier", "currency", "rate", "author")
|
||||||
widgets = {
|
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}),
|
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +94,7 @@ class CashInflowForm(forms.ModelForm):
|
|||||||
model = CashInflow
|
model = CashInflow
|
||||||
fields = ("date", "number", "recipient", "amount", "customer_order", "comment", "author")
|
fields = ("date", "number", "recipient", "amount", "customer_order", "comment", "author")
|
||||||
widgets = {
|
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}),
|
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +104,7 @@ class CashTransferForm(forms.ModelForm):
|
|||||||
model = CashTransfer
|
model = CashTransfer
|
||||||
fields = ("date", "number", "sender", "recipient", "amount", "comment", "author")
|
fields = ("date", "number", "sender", "recipient", "amount", "comment", "author")
|
||||||
widgets = {
|
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}),
|
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,6 +114,6 @@ class CashExpenseForm(forms.ModelForm):
|
|||||||
model = CashExpense
|
model = CashExpense
|
||||||
fields = ("date", "number", "sender", "amount", "supplier_order", "comment", "author")
|
fields = ("date", "number", "sender", "amount", "supplier_order", "comment", "author")
|
||||||
widgets = {
|
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}),
|
"number": forms.TextInput(attrs={"size": 15, "maxlength": 15}),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ from .models import (
|
|||||||
from .forms import (
|
from .forms import (
|
||||||
CustomerOrderForm,
|
CustomerOrderForm,
|
||||||
CustomerOrderItemFormSet,
|
CustomerOrderItemFormSet,
|
||||||
|
CustomerOrderItemFormSetUpdate,
|
||||||
SupplierOrderForm,
|
SupplierOrderForm,
|
||||||
SupplierOrderItemFormSet,
|
SupplierOrderItemFormSet,
|
||||||
|
SupplierOrderItemFormSetUpdate,
|
||||||
CashInflowForm,
|
CashInflowForm,
|
||||||
CashTransferForm,
|
CashTransferForm,
|
||||||
CashExpenseForm,
|
CashExpenseForm,
|
||||||
@@ -81,12 +83,12 @@ class CustomerOrderUpdate(LoginRequiredMixin, UpdateView):
|
|||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
ctx["formset"] = CustomerOrderItemFormSet(instance=self.object)
|
ctx["formset"] = CustomerOrderItemFormSetUpdate(instance=self.object)
|
||||||
ctx["title"] = "Заказ клиента"
|
ctx["title"] = "Заказ клиента"
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
def form_valid(self, form):
|
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():
|
if formset.is_valid():
|
||||||
form.save()
|
form.save()
|
||||||
formset.save()
|
formset.save()
|
||||||
@@ -150,12 +152,12 @@ class SupplierOrderUpdate(LoginRequiredMixin, UpdateView):
|
|||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
ctx["formset"] = SupplierOrderItemFormSet(instance=self.object)
|
ctx["formset"] = SupplierOrderItemFormSetUpdate(instance=self.object)
|
||||||
ctx["title"] = "Заказ поставщику"
|
ctx["title"] = "Заказ поставщику"
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
def form_valid(self, form):
|
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():
|
if formset.is_valid():
|
||||||
form.save()
|
form.save()
|
||||||
formset.save()
|
formset.save()
|
||||||
|
|||||||
Reference in New Issue
Block a user