2013-10-03 32 views
0

我遇到了django時間字段的問題。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,但由於某種原因,它現在不工作..任何想法?

+0

難道這是與Django 1.5中的新時區支持相關的問題嗎?您可以嘗試在您的設置中使用'django.utils.timezone.now'而不是'datetime.datetime.now()'或使用'USE_TZ = False'取消激活時區。 – sebastibe

+0

我認爲這不是模型的問題。模型看起來沒問題,Ben的查詢也很好看。你用'alerts'變量做什麼? –

+0

使用DateTimeField(auto_now_add = True) – drabo2005

回答

0

在你alerts行代碼:

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

Django是試圖與start__lte過濾,但Django的1.5+使用爲日期過濾datetime.datetime格式,但您所定義的格式是datetime.time。所以最好是到timenow定義更改爲以下:

timenow = datetime.datetime.now() 

或者你可以使用Django的時區實用程序:

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

那麼你alerts行代碼應能正確地篩選時間。