2011-01-02 2 views
5

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

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.

+0

cool, questo è quello che stavo pensando anche io. Mi chiedevo se ci fosse un modo migliore per farlo, ma questo mi sembra buono. – killerbarney