Supponiamo di voler creare e aggiornare un modello. Quali campi vengono visualizzati e il tipo di convalida dipende dall'azione (creare o aggiornare). Ma condividono ancora la stessa validazione e funzionalità. C'è un modo pulito per gestire un ModelForm (oltre al fatto che l'istanza esiste ovunque) o dovrei semplicemente creare due diversi modelli?Modelli di design Django - Moduli per creare e aggiornare un modello
5
A
risposta
4
Mi vengono in mente due possibilità. È possibile impostare un attributo di metodo del form __init__
, sia sulla base di un parametro che si passa esplicitamente, o sulla base di se self.instance
esiste e ha un non-None pk:
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# either:
self.edit = kwargs.pop('edit', False)
# or:
self.edit = hasattr(self, instance) and self.instance.pk is not None
super(MyModelForm, self).__init__(*args, **kwargs)
# now modify self.fields dependent on the value of self.edit
L'altra opzione è quella di creare una sottoclasse tua ModelForm - mantenere la funzionalità congiunta nella classe base, quindi la funzionalità specifica di creazione o aggiornamento nelle sottoclassi.
cool, questo è quello che stavo pensando anche io. Mi chiedevo se ci fosse un modo migliore per farlo, ma questo mi sembra buono. – killerbarney