Sie müssen die in this post beschriebene Technik verwenden, um Parameter übergeben zu können. Kredit an diesen Autor für einen ausgezeichneten Beitrag. Sie erreichen dies in mehreren Teilen:
A bilden bewusst, dass es zusätzliche Parameter
Beispiel aus der verknüpften Frage abholen wird:
def __init__(self, *args, **kwargs):
someeobject = kwargs.pop('someobject')
super(ServiceForm, self).__init__(*args, **kwargs)
self.fields["somefield"].queryset = ServiceOption.objects.filter(
somem2mrel=someobject)
Oder Sie können die letztere Code mit
ersetzen
self.fields["somefield"].initial = someobject
Direkt, und es funktioniert.
A curried Form Initialisierung Setup:
formset = formset_factory(Someform, extra=3)
formset.form = staticmethod(curry(someform, somem2mrel=someobject))
Dass Sie bekommt auf Parameter benutzerdefinierte Formular übergeben. Nun, was Sie brauchen, ist:
Ein Generator zu erwerben Ihre unterschiedlichen Anfangsparameter
Ich benutze dieses:
def ItemGenerator(Item):
i = 0
while i < len(Item):
yield Item[i]
i += 1
Nun, ich kann dies tun:
iterdefs = ItemGenerator(ListofItems) # pass the different parameters
# as an object here
formset.form = staticmethod(curry(someform, somem2mrel=iterdefs.next()))
Hey presto. Jede Bewertung der form
-Methode wird in Teilen ausgewertet, die einen iterierten Parameter übergeben. Wir können über das, was wir mögen, iterieren, also verwende ich diese Tatsache, um über eine Menge von Objekten zu iterieren und den Wert von jedem als einen anderen Anfangsparameter zu übergeben.
Ich habe ein ähnliches Problem mit dem OP. Ich versuche, ein Formset mit mehreren Formen zu erstellen, wobei jedes Formular seinen eigenen eindeutigen Satz von Optionen für ein Auswahlelement (d. H. "Auswahlmöglichkeiten") aufweist. Ich kann mir nicht vorstellen, wie diese Lösung helfen würde. Fehle ich etwas? – ACPrice