È necessario utilizzare la tecnica descritta in this post per poter passare i parametri. Credito a quell'autore per un post eccellente. A raggiungere questo in varie parti:
una forma consapevole che sta per raccogliere ulteriori parametri
Esempio dalla questione legata:
def __init__(self, *args, **kwargs):
someeobject = kwargs.pop('someobject')
super(ServiceForm, self).__init__(*args, **kwargs)
self.fields["somefield"].queryset = ServiceOption.objects.filter(
somem2mrel=someobject)
Oppure è possibile sostituire il secondo codice con
self.fields["somefield"].initial = someobject
direttamente, e funziona.
Una configurazione curry forma di inizializzazione:
formset = formset_factory(Someform, extra=3)
formset.form = staticmethod(curry(someform, somem2mrel=someobject))
che si ottiene per il passaggio di parametri modulo personalizzato. Ora quello che serve è:
Un generatore di acquisire i tuoi diversi parametri iniziali
Sto usando questo:
def ItemGenerator(Item):
i = 0
while i < len(Item):
yield Item[i]
i += 1
Ora, posso fare questo:
iterdefs = ItemGenerator(ListofItems) # pass the different parameters
# as an object here
formset.form = staticmethod(curry(someform, somem2mrel=iterdefs.next()))
Ehi, presto. Ogni valutazione del metodo form
viene valutata in parti che passano in un parametro iterato. Possiamo scorrere su ciò che ci piace, quindi sto usando questo fatto per scorrere su un insieme di oggetti e passare il valore di ognuno come un parametro iniziale diverso.
Ho un problema simile all'OP. Sto provando a creare un formset con diverse forme, con ogni modulo che ha il proprio set unico di opzioni per un elemento select (ad esempio "scelte"). Non riesco a capire come questa soluzione possa essere d'aiuto. Mi sto perdendo qualcosa? – ACPrice