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()
24
A
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.
Problemi correlati
- 1. Django - I metodi model save() sono pigri?
- 2. django-allauth - modulo di iscrizione Overriding predefinito
- 3. overriding django collectt
- 4. TFS 2013 - Clean lavoro vs Clean costruire
- 5. Django bloccaggio tra pulito() e save()
- 6. Overriding vs Virtual
- 7. Quando usare `save` vs` save! `Nel modello?
- 8. Django ModelForm not calling clean
- 9. django foreign key save
- 10. Codice VS Git clean recovery
- 11. Mocking Django modello e save()
- 12. ChoiceField in Django model
- 13. Tricky model inheritance - Django
- 14. request.user in Django model
- 15. Yii2: get raw sql di model-> save()
- 16. Overriding AppConfig.ready()
- 17. Django model i18n del contenuto
- 18. Django cross table model structure
- 19. Output Django Model as Table
- 20. Modello logico vs Domain Model
- 21. Django - Keeping save() transazioni basate short
- 22. Django save() comportamento con le transazioni autocommit
- 23. È save() chiamato implicitamente quando si chiama create in django?
- 24. SQLAlchemy Model Metodo di salvataggio simile a Django?
- 25. Django Modello() vs Model.objects.create()
- 26. uso di python super function in django model
- 27. Django model manager objects.create where is the documentation?
- 28. Come posso eseguire l'override del metodo get in django Model?
- 29. Prepopolare il modulo Django (non-Model)
- 30. Django 1.5: UserCreationForm & Custom Auth Model
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 –
Non django.forms.ValidationError, ma django.core.exceptions.ValidationError – benjaoming
Buona cattura. Immagino di averlo sempre importato da form (che lo importa da core.exceptions). Aggiornamento della risposta. – dokkaebi