Dans Django - existe-t-il un champ d'horodatage par défaut pour tous les objets? Autrement dit, dois-je déclarer explicitement un champ 'horodatage' pour 'créé sur' dans mon modèle - ou existe-t-il un moyen l'obtenir automatiquement?
Rien de tel par défaut, mais en ajouter un est très facile. Utilisez simplement le paramètre auto_now_add
Dans la classe DateTimeField
:
created = models.DateTimeField(auto_now_add=True)
Vous pouvez également utiliser auto_now
Pour un champ "mis à jour le". Vérifiez le comportement de auto_now
ici .
Pour auto_now_add
ici .
Un modèle avec les deux champs ressemblera à ceci:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Automagiquement, cela ne ressemble pas à quelque chose que Django ferait par défaut. Cela ne vous obligerait pas à demander un horodatage.
Je construirais une classe de base abstraite et en hériterais tous les modèles si vous ne voulez pas oublier timestamp/fieldname, etc.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Il ne semble pas y avoir grand chose à importer wherever.TimeStampedModel
au lieu de Django.db.models.Model
class MyFutureModels(TimeStampedModel):
....
Si vous utilisez Django-extensions (qui est une bonne application pour ajouter des fonctionnalités à l’assistant de ligne de commande Django-admin.py), vous pouvez obtenir ces champs de modèle gratuitement en héritant de leur TimeStampedModel ou en utilisant leurs champs TimeStamp personnalisés
Vous pouvez essayer Django-extensions
si vous voulez utiliser un modèle abstrait d'horodatage
from Django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Il a d'autres modèles abstraits. vous pouvez l'utiliser aussi.
Si vous voulez pouvoir modifier ce champ, définissez ce qui suit au lieu de auto_now_add=True:
Pour la date
from datetime import date
models.DateField(default=date.today)
Pour DateTime
from Django.utils import timezone
models.DateTimeField(default=timezone.now)
Je pense que j'irais avec
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
J'ai besoin de précisions sur l'utilisation
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True