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éé le» dans mon modèle - ou y a-t-il un moyen de l'obtenir automatiquement?
Réponses:
Rien de tel par défaut, mais en ajouter un est très simple. Utilisez simplement le auto_now_add
paramètre dans la DateTimeField
classe:
created = models.DateTimeField(auto_now_add=True)
Vous pouvez également utiliser auto_now
pour un champ «mis à jour le». Vérifiez le comportement d' 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)
Automagically ne ressemble pas à quelque chose que Django ferait par défaut. Cela ne vous obligerait pas à exiger un horodatage.
Je construirais une classe de base abstraite et en hériterais tous les modèles si vous ne voulez pas oublier l'horodatage / le nom de champ, etc.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Cela ne semble pas beaucoup d'importer wherever.TimeStampedModel
au lieu dedjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
et updated
. C'est une excellente façon de le faire proprement.
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 souhaitez 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 également l'utiliser.
Je pense que j'irais avec
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
J'ai besoin de quelques éclaircissements sur l'utilisation
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
pour Django qui contient déjàTimeStampedModel
, mais si vous n'avez besoin de rien d'autre de ce paquet, gardez-le simplement sans poids supplémentaire.