Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente

Ä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

Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
Zählen Sie die Anzahl der Zeichen im Text in der Zwischenablage auf dem Mac
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
10. Zählen der Anzahl der Zeilen
Holen Sie sich die Anzahl der Ziffern
Berechnen Sie die Anzahl der Änderungen
[Django] Korrigieren Sie die Pluralform des Modellnamens auf dem Verwaltungsbildschirm
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Holen Sie sich die Anzahl der Ansichten von Qiita
Berechnung der Anzahl der Assoziationen von Klamer
Probieren Sie Ajax auf der Django-Seite aus
Holen Sie sich die Anzahl der Youtube-Abonnenten
Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
[Java] [Linux] Untersuchen, wie die Implementierung von untergeordneten Java-Prozessen unter Linux realisiert wird
Der Vorgang des wiederholten Extrahierens eines Arrays unterscheidet sich je nach Sprache geringfügig ...
TLE schien beängstigend zu sein, je nachdem, wie die Eingabe empfangen wurde