A seconda dello stato dei miei modelli, voglio mostrare un modulo diverso all'utente. Sto cercando di capire come memorizzare un riferimento alla forma corretta in modo che possa caricarlo a mio avviso.
Una vista normale sarebbe simile a:
from myapp.forms import SomeForm
def view():
form = SomeForm()
Tuttavia, dal momento che non conosco quale forma ha bisogno il mio modello, come posso importare dinamicamente la classe del modulo?
Ho provato questo:
from django.forms import ModelForm
modelforms = ModelForm.__subclasses__()
def get_modelform(model):
return filter(lambda x:x.Meta.model == model, modelforms)[0]
Ma funziona solo se il modulo è stato importato nel progetto. Dal momento che la mia forma vive in un proprio file forms.py, questo non funziona :(
risposte:
1 per risposta № 1Nel tuo forms.py file, scrivi una funzione che restituisce il modulo corretto in base ai tuoi criteri. Quindi importalo nella tua vista e chiamalo lì.
1 per risposta № 2
Scrivi una funzione che restituisce la classe del modulo necessaria in base alla condizione.
0 per risposta № 3
Devi usare fabricform fabric, potrebbe aiutarti a creare moduli per i tuoi modelli
FormClass = modelform_factory(ModelClass)
https://code.djangoproject.com/browser/django/trunk/django/forms/models.py#L370