2012-01-28 6 views
24

Ho un paio di azioni da eseguire quando si salva un modello, soprattutto dall'admin. Io capitalizzo un paio di campi e controllo per assicurarsi che sia un campo o l'altro sia riempito. Creo anche il campo slug. Ora questi sono suddivisi tra l'override delle funzioni clean e save. Funziona ora, ma sono curioso di sapere quando usarli. Ho esaminato i documenti e non sono riuscito a trovare in modo specifico quale utilizzare quando.Django Overriding Model Clean() vs Save()

risposta

30

È necessario utilizzare clean per eseguire lavori relativi alla convalida e analizzare/modificare/pulire in altro modo l'input. Capitalizzare i campi e generare una lumaca può accadere qui. Uso anche clean per forzare un campo come post_type a un valore specifico nei modelli proxy. Se si alza django.core.exceptions.ValidationError('error text') in clean, lo 'error text' viene aggiunto allo form.non_field_errors.

Salva è il luogo in cui modificare il modo in cui un modello viene effettivamente salvato. Ad esempio, ho usato il salvataggio per creare un ritaglio di un'immagine caricata. ValidationError s non vengono catturati se sollevati qui, e sento che è la differenza pratica più importante tra i due.

+2

Ah ha rubato le parole sulla mia tastiera. Bella risposta. L'unica cosa che stavo per aggiungere è un link ai documenti dove c'è un bel esempio di un 'ValidationError' che viene lanciato: https://docs.djangoproject.com/en/dev/ref/models/instances/#django .db.models.Model.clean –

+4

Non django.forms.ValidationError, ma django.core.exceptions.ValidationError – benjaoming

+0

Buona cattura. Immagino di averlo sempre importato da form (che lo importa da core.exceptions). Aggiornamento della risposta. – dokkaebi