2012-04-17 3 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 "빨아"라고합니까? 이 두 필드 매개 변수를 사용하여 생성 된/마지막으로 업데이트 된 패턴을 구현하는 데 아무런 문제가 없었습니다.

더 좋은 방법이 있습니까? 맞춤 필드 클래스? 그리고 왜 (이 접근법이 더 좋다면) Django에 통합되지 않았습니까?

답변

11

올바른 해결 방법은 해당 날짜 시간을 반환하는 필드 default으로 호출 가능을 전달하는 것입니다. datetime.datetime.now.

+1

'auto_now_add = True'는'default = datetime.now(), editable = False, blank = True'에 대한 단축키입니다. 그러나'auto_now = True'를 구현하는 방법은 무엇입니까? –

+1

'save()'메소드를 오버라이드 (override) 해 거기에 설정합니다. –

+2

또한 'default = datetime.now'입니다. –

2

auto_nowauto_now_add은 django를 통해 값을 변경할 수있는 방법이 전혀 없으므로 (예 : 관리 인터페이스에서) 해로운 것으로 간주됩니다.

이것은 다른 플래그와의 불일치이며, 장고 사람들은 일반적으로 그런 종류의 마법을 좋아하지 않습니다.

+8

생성 시간 (또는 마지막 수정 시간)을 반영하는 필드는 관리자가 편집 할 수있는 의미가 없습니다. –

+1

때때로 가짜를 만들고 싶습니다. 백업 및 복원을 고려하십시오. – ch3ka

+9

나는 DjangoLint를 사용하고 싶지 않다는 것을 확신했다. auto_add 및 auto_add_new에 실제 결함이있는 경우 수정해야합니다. 하지만 여기서는 그렇지 않습니다. 귀하의 개인적인 요구 사항을 충족시키지 못해서 불량품으로 사용하지 않아도되는 사항을 고려하는 것은 좁고 근시안적입니다. 그것을 사용하지 말고 다른 사람의 요구 사항을 이해한다고 생각하지 마십시오. 많은 사람들에게 값을 쉽게 바꿀 수 없다는 사실은 버그가 아니라 기능입니다. 어떤 사람들은 싫어하는 일은 린트 프로그램에 속하지 않는다고 생각합니다. –