2012-04-17 5 views
7

こんにちは仲間Djangonautsは:django-lintはなぜ `auto_now_add`が廃止予定だと言っていますか?

私はdjango-lintで私のプロジェクトをチェックし、それが得られます。

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

commit message

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

なぜ彼らはauto_now/auto_now_add "吸う" と言うのですか?これらの2つのフィールドパラメータで作成/最終更新パターンを実装するのに問題はありませんでした。

このパターンにはより良いアプローチがありますか?カスタムフィールドクラス?そして、なぜ(このアプローチが良いのであれば)それはDjangoに統合されていませんか?

答えて

11

適切な修正は、適切な日時を返すフィールドのdefaultとして呼び出し可能を渡すことです。 datetime.datetime.now

+1

'auto_now_add = True'は' default = datetime.now()、editable = False、blank = True'のショートカットです。しかし、 'auto_now = True'をどのように実装するのですか? –

+1

'save()'メソッドをオーバーライドし、そこに設定します。 –

+2

また、 'default = datetime.now'です。 –

2

auto_nowauto_now_addは、あなたが絶対にdjangoを使って値を変更することができないので(例えば、管理者インターフェイスで)有害とみなされます。

これは他のフラグとの不一致であり、一般的にdjangoの人々はそのような魔法を好きではありません。

+8

作成時間(または最終更新時間)を反映したフィールドは、管理者が編集可能であると私にはあまり意味がありません。 –

+1

あなたは時々ものを偽造したい。バックアップとリストアを検討してください。 – ch3ka

+9

私はちょうどDjangoLintを使いたくないと確信しています。 auto_addとauto_add_newに実際の欠陥がある場合は修正する必要があります。しかし、ここではそうではありません。 あなたの個人的な要件を満たしていないために悪用される必要がないことを考えているのは、狭くて短所です。それを使用せず、他の人の要求を理解しているとは思わないでください。多くの人にとって、値を簡単に変更できないということは機能であり、バグではありません。 リントプログラムに所属していない人が好きではないものがあります。 –

関連する問題