The Python Oracle

Difference between auto_now and auto_now_add

This video explains
Difference between auto_now and auto_now_add

--

Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn

--

Track title: CC P Beethoven - Piano Sonata No 2 in A

--

Chapters
00:00 Question
00:40 Accepted answer (Score 56)
01:35 Answer 2 (Score 9)
01:54 Answer 3 (Score 8)
02:25 Answer 4 (Score 4)
02:47 Thank you

--

Full question
https://stackoverflow.com/questions/5138...

Accepted answer links:
[DateField.pre_save]: https://docs.djangoproject.com/en/2.0/_m...
[DateTimeField.pre_save]: https://docs.djangoproject.com/en/2.0/_m...

Answer 2 links:
[django documentation]: https://docs.djangoproject.com/en/3.1/re...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #django #djangomodels #djangoforms #djangotemplates

#avk47



ACCEPTED ANSWER

Score 66


auto_now takes precedence (obviously, because it updates field each time, while auto_now_add updates on creation only). Here is the code for DateField.pre_save method:

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)

As you can see, if auto_now is set or both auto_now_add is set and the object is new, the field will receive current day.

The same for 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)



ANSWER 2

Score 11


These fields are built into Django for expressly this purpose — auto_now fields are updated to the current timestamp every time an object is saved and are therefore perfect for tracking when an object was last modified, while an auto_now_add field is saved as the current timestamp when a row is first added to the database and is therefore perfect for tracking when it was created.




ANSWER 3

Score 9


According to the django documentation using both auto_now and auto_now_add in your model fields as True will result in an error because they are both mutually exclusive.




ANSWER 4

Score 6


As Official Django documentation says -

auto_now, auto_now_add and default are mutually exclusive and will result in an error if used together