Quale sarebbe il modo più elegante ed efficace per ripristinare tutti i campi di una determinata istanza di modello ai loro valori predefiniti?Django - Come reimpostare i campi del modello al loro valore predefinito?
risposta
Assegna None
ai campi e salva.
Non funzionerebbe solo in un sottoinsieme di situazioni? Ad esempio, potrebbe funzionare per i campi non contrassegnati con blank = True e null = True? – Jonathan
Inserimenti di database o aggiornamenti di NULL vengono modificati nel valore predefinito del campo. –
@ Jonathan Sono abbastanza sicuro che tu abbia ragione. Perché Django dovrebbe anche avere campi 'nulli = Veri 'se diventano solo valori predefiniti? – Mark
Dopo aver apportato modifiche a quell'istanza ma prima di averlo "salvato", presumo? Penso che probabilmente dovrai recuperarlo nuovamente dal database ... Non penso che le istanze del modello Django mantengano una "cronologia" delle modifiche apportate a un'istanza.
Una volta ho fatto così. Non c'è modo migliore di pensare.
from django.db.models.fields import NOT_PROVIDED
for f in instance._meta.fields:
if f.default <> NOT_PROVIDED:
setattr(instance, f.name, f.default)
# treatment of None values, in your words, to handle fields not marked with null=True
...
...
# treatment ends
instance.save()
Nota: Nel mio caso tutti i campi, ha avuto valore di default.
Spero che possa essere d'aiuto. Felice codifica.
def reset(self, fields=[], exclude=[]):
fields = fields or filter(lambda x: x.name in fields, self._meta.fields)
exclude.append('id')
for f in filter(lambda x: x.name not in exclude, fields):
if getattr(f, 'auto_now_add', False):
continue
if f.blank or f.has_default():
setattr(self, f.name, f.get_default())
Questo metodo è applicabile principalmente per reimpostare un valore singolo su un valore predefinito, ma può essere adattato. Reimposta la proprietà rego_update
per tutti gli oggetti Event
.
Event.objects.all().update(rego_update=Event().rego_update)
In alternativa, da applicare singolarmente (cioè di innescare personalizzati save
metodi):
default = Event().rego_update # Hack to fetch the default
for event in Event.objects.all():
event.rego_update = default
event.save()
di adattare questo per ripristinare tutti i valori per una singola istanza, è possibile reimpostare manualmente ogni valore con un valore predefinito .
In alternativa, è possibile scorrere gli attributi in modo simile ad altre risposte qui, ma ciò avrà problemi con i campi che non hanno valore predefinito (o che non possono essere modificati).
- 1. Come funzionano i campi del modello Django?
- 2. Ottieni i campi del modello in Django
- 3. UUID come valore predefinito nel modello Django
- 4. Django: valore predefinito del campo dalle istanze del modello stesso
- 5. Campi di modellazione del modello di Django
- 6. Django: Perché alcuni campi modello si scontrano tra loro?
- 7. Campi del modello di Django. Personalizzatore valore di campo personalizzato
- 8. iterazione attraverso i campi modello - Django
- 9. Campo modello Django predefinito dal metodo modello
- 10. Ereditarietà del modello di Django. Nascondere o rimuovere campi
- 11. Come sovrascrivere il campo del modello utente predefinito in Django?
- 12. Come aggiornare più campi di un'istanza del modello django?
- 13. Come posso rendere facoltativi i miei campi modello in Django?
- 14. Come modificare il formato del modello di data Django predefinito?
- 15. Aggiunta del campo Autoincrement al modello esistente con Django South?
- 16. Django modello di campo predefinito per Null
- 17. Ext.form.Basic come reimpostare campi quando trackResetOnLoad vero?
- 18. django-rest-framework come rendere necessari i campi del serializzatore del modello
- 19. Campi del modello personalizzato di Django: to_python() non chiamato
- 20. Posso aggiungere testo di aiuto nei campi del modello django
- 21. Django umanizza al di fuori del modello?
- 22. aggiungi richiesta al metodo del modello django?
- 23. Django inizia con i campi
- 24. Come si ottiene il valore predefinito per un campo in un modello Django?
- 25. I dispositivi Django salvano con il valore predefinito
- 26. Come si cambiano gli argomenti dei campi nelle sottoclassi del modello Django?
- 27. Campi di accesso nel modello intermedio Django
- 28. Django: imposta il widget predefinito nella definizione del modello
- 29. Aggiungere dinamicamente i campi modulo al modulo django
- 30. Valore predefinito per un segnaposto del modello Handlebars`
Penso di aver capito male la tua domanda - vuoi impostare ogni campo sul valore "predefinito" codificato per ogni oggetto di campo sul modello - o impostare ogni campo su ciò che era prima del valore del il campo è stato modificato? –
@ Matthew - il priore. Se avessi voluto il secondo, ti farei il django-reversione. – Jonathan