web-dev-qa-db-fra.com

Différence entre auto_now et auto_now_add

Ce que j'ai compris dans les attributs du champ Django models est

  • auto_now - met à jour la valeur du champ à l'heure et à la date actuelles à chaque appel de Model.save ().
  • auto_now_add - met à jour la valeur avec l'heure et la date de création de l'enregistrement.

Ma question est de savoir si un modèle déposé contient à la fois le auto_now et auto_now_add défini sur True? Que se passe-t-il dans ce cas?

7
Sukumar

auto_now a priorité (évidemment, car il met à jour le champ à chaque fois, tandis que auto_now_add mises à jour sur la création uniquement). Voici le code pour DateField.pre_save méthode:

def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = datetime.date.today()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)

Comme vous pouvez le voir, si auto_now est défini ou les deux auto_now_add est défini et l'objet est nouveau, le champ recevra le jour en cours.

De même pour DateTimeField.pre_save :

def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = timezone.now()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)
7
awesoon