2013-10-03 2 views
0

장고 시간 필드에 문제가 있습니다.Django 1.5 - 시간 필드

내 모델 :

class IpCameraAlert(models.Model): 
    ipCamera = models.ForeignKey(IpCamera, verbose_name='Zone') 
    start = models.TimeField() 
    end = models.TimeField() 
    email_to = models.CharField(max_length=255, null=True, blank=True, verbose_name='Email to') 
    sms_to = models.CharField(max_length=255, null=True, blank=True, verbose_name='SMS to') 
    created = models.DateTimeField(auto_now_add=True, editable=False) 
    modified = models.DateTimeField(auto_now=True, editable=False) 
    user = models.ForeignKey('auth.User', editable=False) 

나는 다음과 같은 경우 :

 timenow = datetime.datetime.time(datetime.datetime.now()) 
     alerts = IpCameraAlert.objects.filter(ipCamera=camera, start__lte=timenow, end__gte=timenow) 

난 항상 응답을 얻을 :

ValueError: Can't encode datetime.time(13, 10, 50, 251016) 

또는 시간에 따라 유사합니다. 그것은 1.4에서 작동하지만, 지금은 작동하지 않는 몇 가지 이유로 .. 어떤 아이디어? 코드의 당신의 alerts 라인에서

+0

Django 1.5의 새로운 표준 시간대 지원과 관련된 문제 일 수 있습니까? 'datetime.datetime.now()'대신'django.utils.timezone.now'를 사용하거나 설정에서'USE_TZ = False'를 사용하여 시간대 지원을 비활성화 할 수 있습니다. – sebastibe

+0

나는 모델에 문제가 없다고 생각한다. 이 모델은 괜찮아 보입니다. Ben이 만드는 쿼리는 너무 좋아 보입니다. 'alerts' 변수로 무엇을하고 있습니까? –

+0

DateTimeField 사용 (auto_now_add = True) – drabo2005

답변

0

: 장고 start__lte로 필터링하려고하지만 장고 1.5 날짜에 대한 필터링 datetime.datetime 형식을 사용하지만 사용자가 정의한 형식이 datetime.time입니다

alerts = IpCameraAlert.objects.filter(ipCamera=camera, start__lte=timenow, end__gte=timenow) 

. 그런 다음 코드의 당신의 alerts 라인이 제대로 필터링 할 수 있어야한다

from django.utils import timezone 
timenow = timezone.now() 

:

timenow = datetime.datetime.now() 

을 아니면 장고 시간대 유틸리티를 사용할 수 있습니다 : 그래서 다음에 timenow의 정의를 변경하는 것이 가장 좋습니다 시간.