2011-08-12 4 views
0

최근 질문이 this 건이므로 모든 datetime 개체를 UTC로 저장해야하므로 저장하기 전에 맞춤 라이브러리를 올바르게 변환해야합니다. datetime 개체를 UTC로 변환하기 위해 저장 및/또는 업데이트하려고하는 개체를 처리 할 수있는 방법이 있습니까? 나는 이것이 내가 장고를 사용하는 방법에 꽤 투명하게 좋아, 그래서 것이 분야의 이러한 유형 중 하나 인 경우 :장고에서 개체를 저장하거나 업데이트하기 전에 개체를 조작 할 수있는 방법이 있습니까?

created = models.DateTimeField(auto_now_add=True) 
modified = models.DateTimeField(auto_now=True) 
event_time = models.DateTimeField() 

... 내가 너무 '무대 뒤에서'를 번역하고 싶습니다를 이하지 않도록 수동으로 다음을 수행하는, 말 :

new_instance.created = translate(now) 
new_instance.modified = translate(now) 
new_instance.event_time = translate(event_time) 

그것은 수동으로 모든 DateTimeField 필드에이 일을 꽤 빨리 꽤 성가신 일 것입니다. 장고에서이 작업을 수행 할 수있는 방법이 있습니까? 최대 절전 모드에서이 작업을 수행하려면 AOP 또는 Interceptor을 사용하십시오. https://docs.djangoproject.com/en/1.3/topics/signals/

답변

1

방법 TIME_ZONE 설정에 대한 :

+0

'TIME_ZONE'을 (를) 'UTC'로 설정하면 날짜를 변환 할 표준 시간대를 어떻게 찾을 수 있습니까? 클라이언트가 날짜를 변환하는 데 사용할 수있는 시간대 오프셋을 제공합니까? –

+0

나는 내 컴퓨터에서 이것을 시도했다. 'auto_now'와'auto_now_add'의 경우, TIME_ZONE을 UTC로 설정하면 (IIRC는 시스템 시간대와의 차이를 계산했습니다 (적어도 유닉스 시스템의 경우)) 자동으로 UTC 시간으로 저장됩니다. 사용자가 자신의 tz 설정을 원한다면 예, 정보를 UserProfile 또는 뭔가에 저장하십시오 – kusut

1

는 신호에서보세요?

제목의 질문에 대답하려면 모델에 저장 메소드를 오버라이드 (override) 할 수 있습니다

def save(self): 
    # do stuff before save 
    super(YourModel, self).save() 
    # do stuff after save 

당신이 (같은 미리 저장 한 후 저장) 특정 이벤트에 대해 다른 사람에게 알려하려는 경우, 사용 장고 signals

0

흠, 내가 올바르게 당신을 이해한다면, 좋은 방법은 사용자 정의 DateTimeField을 만드는 것입니다. 이를 위해 서브 클래스 DateTimeField을 작성하고 몇 가지 메소드 (예 : to_python, pre_save 등)를 재정의해야합니다.

자세한 내용은 documentation을 확인하십시오.

관련 문제