Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does django-lint tell me the `auto_now_add` is deprecated?

Hi fellow Djangonauts:

I checked my project with django-lint, and it yields:

W:211,16:MyModel: timestamp: Uses superceded auto_now or auto_now_add

The commit message:

auto_now/auto_now_add not technically deprecated, but they still suck.

Why do they say auto_now/auto_now_add "suck"? I had no problem implementing the created/last-updated pattern with these two field parameters.

Is there a better approach for this pattern? Custom Field classes? And why (if this approach is better) it hasn't been integrated into Django?

like image 212
Armando Pérez Marqués Avatar asked Apr 17 '12 16:04

Armando Pérez Marqués


2 Answers

The correct fix is to pass a callable as the field's default that returns the appropriate datetime, e.g. datetime.datetime.now.

like image 52
Ignacio Vazquez-Abrams Avatar answered Oct 14 '22 20:10

Ignacio Vazquez-Abrams


auto_now and auto_now_add are considered harmful, because you have absolutely no way to change the value via django (say for example, in the admin interface).

This is an inconsitency with other flags, and django people generally don't like that sort of magic.

like image 2
ch3ka Avatar answered Oct 14 '22 19:10

ch3ka