Tout champ avec l' auto_nowattribut défini héritera également editable=Falseet n'apparaîtra donc pas dans le panneau d'administration. Il a été question dans le passé de faire disparaître les arguments auto_nowet 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_nowou auto_now_addet de définir votre propre save()méthode pour vous assurer qu'elle createdn'est mise à jour que si elle idn'est pas définie (comme lorsque l'élément est créé pour la première fois), et la mettre à jour à modifiedchaque 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.datetimeobjet 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 createdne 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_nowet auto_now_addest au mieux feuilleté.