Ändern Sie die Anzahl der untergeordneten Formulare von Companion um die Anzahl der eingegebenen Bestellungen (Einheiten).
Ich weiß nicht, wie ich es machen soll, also werde ich es gewaltsam versuchen. :: ::
if request.method == "POST":
form = OrderForm(user=request.user,
ticket=ticket, data=request.POST)
#: Order(bestellen)
is_form_valid = form.is_valid()
#: Companion (Begleitperson)
formset = create_companion_formset(
request, order=form.instance)
is_formset_valid = formset.is_valid()
number = int(form.cleaned_data.get('units', 1))
if number != len(formset.forms):
#:Weil sich die Anzahl geändert hat....
is_formset_valid = False
old = formset
#:Erstellen Sie das Formularset mit einer neuen Nummer neu
formset = create_companion_formset(None, extra=number)
#:eine Kopie machen
for i in range(min(number, len(old.forms))):
formset.forms[i] = old.forms[i]
if is_form_valid and is_forset_valid:
form.save()
formset.save()
#:.....
Obligatorische Eingabe des hinzugefügten Kinderformulars:
class OrderCompanionFormset(BaseInlineFormSet):
def clean(self):
for i in range(self.total_form_count()):
if not self.forms[i].has_changed():
_errs = self.forms[i].error_class(
[_("Form must be filled.")])
self.forms[i].errors['__all__'] = _errs
Formset Factory:
def create_companion_formset(request, order=None, extra=1, *args, **kwargs):
'''Erstellen Sie einen Companion-Formularsatz'''
kwargs['form'] = CompanionForm
kwargs['can_delete'] = False
kwargs['formset'] = OrderCompanionFormset
#:Normal
if request and request.method == "POST":
formset = inlineformset_factory(
Order, Companion,
*args, **kwargs)(request.POST, instance=order)
else:
formset = inlineformset_factory(
Order, Companion, extra=extra,
*args, **kwargs)(instance=order)
return formset
Die _errs-Nachricht wird in non_form_erros angezeigt:
{% for form in formset %}
<h4>Begleitperson</h4>
{% if form.non_form_errors %}
<div class="alert alert-error">{{ from.non_form_error.as_text }}</div>
{% endif %}
....
{% endfor %}
Recommended Posts