2012-04-17 13 views
7

Hallo Kerl Djangonauts:Warum sagt mir Django-Lint, dass `auto_now_add` veraltet ist?

checkte ich mein Projekt mit django-lint, und es ergibt sich:

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

Die commit message:

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

Warum sagen sie auto_now/auto_now_add "saugen"? Ich hatte kein Problem damit, das erstellte/zuletzt aktualisierte Muster mit diesen beiden Feldparametern zu implementieren.

Gibt es einen besseren Ansatz für dieses Muster? Benutzerdefinierte Feldklassen? Und warum (wenn dieser Ansatz besser ist) wurde es nicht in Django integriert?

Antwort

11

Die richtige Lösung besteht darin, eine aufrufbare Nachricht zu übergeben, da das Feld default das entsprechende Datum, z. datetime.datetime.now.

+1

Man könnte sagen, dass 'auto_now_add = True' eine Abkürzung für' default = datetime.now(), bearbeitbar = False, blank = True 'ist. Aber wie implementiert man 'auto_now = True'? –

+1

Überschreiben Sie die Methode 'save()' und legen Sie sie dort fest. –

+2

Auch "default = datetime.now". –

2

auto_now und auto_now_add werden als schädlich angesehen, weil Sie absolut keine Möglichkeit haben, den Wert über django zu ändern (sagen Sie zum Beispiel in der Admin-Oberfläche).

Dies ist eine Ungereimtheit mit anderen Flaggen, und Django Leute mögen diese Art von Magie im Allgemeinen nicht.

+8

Ein Feld, das die Erstellungszeit (oder die Zeit der letzten Änderung) widerspiegelt, macht für mich keinen Sinn, im Admin bearbeitet zu werden. –

+1

manchmal möchten Sie Dinge fälschen. Bedenken Sie Backups und deren Wiederherstellung. – ch3ka

+9

Ich bin gerade davon überzeugt, dass ich DjangoLint niemals benutzen möchte. Wenn es einen Fehler in auto_add und auto_add_new gibt, sollten sie behoben sein. Aber das ist hier nicht der Fall. Betrachten Sie etwas, das Sie nicht verwenden müssen, um schlecht zu sein, weil es Ihren persönlichen Anforderungen nicht entspricht, eng und kurzsichtig ist. Benutze es nicht und denke nicht, dass du alle anderen Anforderungen verstehst. Für viele Menschen ist die Tatsache, dass der Wert nicht einfach geändert werden kann, eine Eigenschaft, kein Fehler. Dinge, die manche Leute nicht mögen, gehören nicht in ein Lint-Programm. –

Verwandte Themen