Tout champ avec l' auto_now
attribut défini héritera également editable=False
et n'apparaîtra donc pas dans le panneau d'administration. Il a été question dans le passé de faire disparaître les arguments auto_now
et auto_now_add
, et bien qu'ils existent toujours, je pense que vous feriez mieux d'utiliser une méthode personnaliséesave()
.
Donc, pour que cela fonctionne correctement, je vous recommande de ne pas utiliser auto_now
ou auto_now_add
et de définir votre propre save()
méthode pour vous assurer qu'elle created
n'est mise à jour que si elle id
n'est pas définie (comme lorsque l'élément est créé pour la première fois), et la mettre à jour à modified
chaque fois que l'élément est enregistré.
J'ai fait exactement la même chose avec d'autres projets que j'ai écrits en utilisant Django, et ainsi vous save()
ressembleriez à ceci:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
J'espère que cela t'aides!
Modifier en réponse aux commentaires:
La raison pour laquelle je reste fidèle à la surcharge par save()
rapport à l'utilisation de ces arguments de champ est double:
- Les hauts et les bas susmentionnés avec leur fiabilité. Ces arguments dépendent fortement de la façon dont chaque type de base de données avec lequel Django sait interagir traite un champ d'horodatage et semble rompre et / ou changer entre chaque version. (Ce qui, à mon avis, est l'impulsion derrière l'appel à les faire supprimer complètement).
- Le fait qu'ils ne fonctionnent que sur DateField, DateTimeField et TimeField et qu'en utilisant cette technique, vous pouvez remplir automatiquement n'importe quel type de champ chaque fois qu'un élément est enregistré.
- Utilisez
django.utils.timezone.now()
vs. datetime.datetime.now()
, car cela retournera un datetime.datetime
objet sensible à TZ ou naïf selon settings.USE_TZ
.
Pour savoir pourquoi le PO a vu l'erreur, je ne sais pas exactement, mais il semble que ce created
ne soit même pas du tout peuplé, malgré le fait auto_now_add=True
. Pour moi, il s'agit d'un bug et souligne l'élément n ° 1 dans ma petite liste ci-dessus: auto_now
et auto_now_add
est au mieux feuilleté.