DateTimeField(auto_now=True) et update

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut à tous !

J'ai un petit soucis avec mes modèles Django.

J'ai un modèle qui possède un DateTimeField avec l'argument auto_now=True. Lorsque je crée une nouvelle instance de ce modèle, pas de soucis le DateTimeField possède bien la date du moment où il a été créé. Le problème, c'est que lorsque j'update mon modèle avec de nouvelles valeurs, le DateTimeField ne se met pas à jour. Ce n'est pas le comportement attendu il me semble :

Doc Django:

"Assigne automatiquement la valeur du champ à la date du jour lors de chaque enregistrement de l’objet. Utile pour les horodatages de « dernière modification ». Notez que c’est toujours la date actuelle qui est utilisée ; il ne s’agit pas seulement d’une valeur par défaut que l’on peut surcharger."

Es-ce un bug de Django ? Ou es-ce moi qui me trompe ?

Je vous remercie par avance ;)

Édité par DigitalSuricate

+0 -0
Auteur du sujet

Non, je n'est pas redéfini ma fonction save().

Et voici comme j'update mon objet :

1
2
mon_objet = autre_objet.monobjet_set.filter(toto='ZDS')
mon_objet.update(foo='bar') # je ne touche pas à la date

Édité par DigitalSuricate

+0 -0
Auteur du sujet

Non, toujours rien :'(

J'ai essayé avec mon_objet.update() et mon_objet.save(), et la date ne se met toujours pas à jour …

Voici le modèle de mon_objet qui se nomme Activity dans mon projet :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Activity(models.Model):
    title = models.CharField(max_length=255)
    date = models.DateTimeField(auto_now=True)  # last modification date
    multi_attempts = models.BooleanField()
    interactive_correction = models.BooleanField()

    teacher = models.ForeignKey('Teacher')

    def __str__(self):
        return "{0} ({1})".format(self.title, self.date)

Voici la partie internationalisation de mon settings.py

1
2
3
4
5
6
7
8
9
LANGUAGE_CODE = 'fr-FR'

TIME_ZONE = 'Europe/Paris'

USE_I18N = True

USE_L10N = True

USE_TZ = False

(J'utilise Django 1.8 et Python3)

EDIT: Plus la peine de se creuser la tête le problème est résolu.

Il suffit da faire ceci :

1
2
3
mon_objet = autre_objet.monobjet_set.filter(toto='ZDS')
mon_objet.update(foo='bar')
mon_objet.save()

Apparemment Django met à jour la date, non pas à l'update, mais à la sauvegarde.

Édité par DigitalSuricate

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte