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?
la source
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?
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):
....
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.created
etupdated
. 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
la source
Vous pouvez essayer django-extensions
si vous souhaitez utiliser un modèle abstrait d'horodatage
Il a d'autres modèles abstraits. vous pouvez également l'utiliser.
la source
Si vous souhaitez pouvoir modifier ce champ, définissez ce qui suit au lieu de
auto_now_add=True:
Pour la date
Pour DateTime
la source
Je pense que j'irais avec
J'ai besoin de quelques éclaircissements sur l'utilisation
la source