2010-06-15 9 views
10

Ho un modulo modello che utilizzo per aggiornare un modello.Come posso aggiornare solo determinati campi in un modulo modello Django?

class Turtle(models.Model): 
    name = models.CharField(max_length=50, blank=False) 
    description = models.TextField(blank=True) 

class TurtleForm(forms.ModelForm): 
    class Meta: 
     model = Turtle 

A volte non c'è bisogno di aggiornare l'intero modello, ma solo voglia di aggiornare uno dei campi. Quindi quando I POST il modulo ha solo informazioni per la descrizione. Quando lo faccio, il modello non salva mai perché pensa che il nome venga cancellato mentre il mio intento è che il nome non cambi e venga usato solo dal modello.

turtle_form = TurtleForm(request.POST, instance=object) 
    if turtle_form.is_valid(): 
     turtle_form.save() 

C'è un modo per farlo accadere? Grazie!

risposta

9

campi, utilizzare esclusivamente le:

class FirstModelForm(forms.ModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title',) 
    def clean_title(self.... 

Vedi http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude

È comune utilizzare diversi ModelForm per un modello in diverse viste, quando sono necessarie funzionalità diverse. Quindi creare un altro modulo per il modello che utilizza lo stesso comportamento (per esempio clean_<fieldname> metodi etc.) utilizzano:

class SecondModelForm(FirstModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title', 'description') 
+0

Grazie. La cosa bella di questo metodo è che ho solo bisogno di inviare il modulo completo per compilare il modello e quindi posso scegliere diverse forme a seconda di ciò che ho postato. –

1

Se non si desidera aggiornare un campo, rimuoverlo dal modulo tramite il Meta exclude tuple:

class Meta: 
    exclude = ('title',) 
+0

Questo non è esattamente quello che voglio fare. Ho un singolo TurtleForm e in un punto della pagina voglio solo la descrizione e in un altro punto voglio avere il modulo completo. È possibile o devo dividerlo in due forme diverse? –

Problemi correlati