In django, esiste un campo timestamp predefinito per tutti gli oggetti? Cioè, devo dichiarare esplicitamente un campo "timestamp" per "creato il" nel mio modello - o c'è un modo per ottenerlo automaticamente?
Risposte:
Nessuna cosa del genere per impostazione predefinita, ma aggiungerne uno è semplicissimo. Usa semplicemente il auto_now_add
parametro nella DateTimeField
classe:
created = models.DateTimeField(auto_now_add=True)
Puoi anche utilizzare auto_now
per un campo "aggiornato su". Controlla il comportamento di auto_now
qui .
Per auto_now_add
qui .
Un modello con entrambi i campi sarà simile a questo:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Automagicamente non suona come qualcosa che django farebbe di default. Non ti costringerebbe a richiedere un timestamp.
Creerei una classe base astratta e erediterei tutti i modelli da essa se non vuoi dimenticare il timestamp / fieldname, ecc.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Non sembra molto da importare wherever.TimeStampedModel
invece didjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
e updated
. Questo è un ottimo modo per farlo in modo pulito.
Se stai usando django-extensions (che è una buona app per aggiungere funzionalità all'helper della riga di comando django-admin.py) puoi ottenere questi campi modello gratuitamente ereditando dal loro TimeStampedModel o usando i loro campi TimeStamp personalizzati
Puoi provare django-extensions
se si desidera utilizzare il modello astratto timestamp
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Ha altri modelli astratti. puoi usare anche quello.
Penso che andrei con
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Ho bisogno di alcuni chiarimenti sull'utilizzo
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
per Django che contiene giàTimeStampedModel
, ma se non hai bisogno di nient'altro da questo pacchetto, tienilo senza peso extra.