2011-11-03 2 views
7

Come posso sapere in MyForm.clean() se i dati sono nuovi o se i dati già salvati vengono modificati?Django - come sapere nel metodo clean se i dati del modulo sono nuovi o se i vecchi dati vengono modificati

Cosa dovrebbe essere_this_new_data() nel seguente codice?

class MyForm(forms.ModelForm): 
    def clean(self): 
     cleaned_data = self.cleaned_data 
     if is_this_new_data(self): 
      # perform some checks if this is new data 
     else: 
      # do nothing if this is data being modifed 
      return cleaned_data 

risposta

20

check self.cleaned_data['some_field'] contro self.instance.some_field.

Un modo rapido per verificare se l'oggetto è nuovo è vedere se self.instance.pk ha un valore. Sarà None a meno che l'oggetto non esista già.

+1

Grazie Chris, ha funzionato. Sono sorpreso che non ci sia alcun accenno a questo nel documento Django. Avevo passato i documenti e ho cercato google senza fortuna. –

3

Nel clean è possibile accedere all'attributo changed_data, che è un elenco dei nomi dei campi che sono stati modificati.

def clean(self): 
    cleaned_data = self.cleaned_data: 
    for field_name in self.changed_data: 
     # loop through the fields which have changed 
     print "field %s has changed. new value %s" % (field_name, cleaned_data[field_name]) 
     do_something() 
    return cleaned_data