嗨,我有一些Django的11项目中,我的模型看起来像Django的视图对象与timezone.now过滤器()。日期或timezone.now()。时间>期望的字符串或字节状物体
class Event(models.Model):
name = models.CharField(max_length=100, unique=True)
title = models.CharField(max_length=100)
info = models.CharField(max_length=100)
image = models.ImageField(upload_to='events/%Y/%m/%d')
start_date = models.DateField(default=timezone.now)
start_time = models.TimeField(default=timezone.now)
stop_date = models.DateField(default=timezone.now)
stop_time = models.TimeField(default=timezone.now)
place = models.ForeignKey('places.Place', on_delete=models.CASCADE)
company = models.ForeignKey('companies.Company', on_delete=models.CASCADE)
和我的观点看起来像
def place_website(request, place_id):
place_template = get_template('room.html')
place_obj = Place.objects.filter(id=place_id)
# filter for event obejts only for requested place, filtered for now and next events
place_event_now = Event.objects.filter(place=place_id, start_date=timezone.now().date, stop_date__gte=timezone.now().date)
place_events_next = Event.objects.filter(place=place_id, start_date=timezone.now(), stop_date__gte=timezone.now()).order_by('start_time')
place_context = {
'place_obj': place_obj,
'place_event_now': place_event_now,
'place_events_next': place_events_next,
}
return HttpResponse(place_template.render(place_context))
我要管理的事情是要传递给模板,根据时间过滤事件对象的列表。
让我们选择这行
place_event_now = Event.objects.filter(place=place_id, start_date=timezone.now().date, stop_date__gte=timezone.now().date)
它职高错误“预期字符串或字节状物体”,但是当我删除“.date”‘timezone.now()’错误消失(然后过滤无能为力),但我想比较日期和时间。
如何正确执行此操作?
这种在视图中而不是在模板中过滤对象的方法是正确的吗?
###### UPDATE ########
其因修正后werid现在我没有错误,但查询集没有正确过滤,看起来就像只有两个第一个参数是过滤好吧,另外两个导致空的查询集。
place_event_now = Event.objects.filter(place=place_id, start_date=timezone.now().strftime('%Y-%m-%d'), start_time__lte=timezone.now().strftime('%H:%M:%S'), stop_time__gte=timezone.now().strftime('%H:%M:%S'))
我我的数据库时,保存在格式H:M:S。和timezone.now()时间()有不同的格式,所以我修改滤波器.strftime这没有帮助,我什么将不会将“place_event_now”queryset设置为满足条件的特定对象/对象start_time < currenttime < stop_time。
另一种情况是用place_event_next
place_events_next = Event.objects.filter(place=place_id, start_date=timezone.now().strftime('%Y-%m-%d'), stop_date__gte=timezone.now().strftime('%Y-%m-%d'), start_time__gt=timezone.now().strftime('%H:%M:%S')).order_by('start_time')
事件时筛选对象START_TIME大于timezone.now()它们仍然是在查询集。
我做错了什么?
您错过了括号'.date()' –
https://docs.djangoproject.com/en/1。11 /话题/国际时区/ – Alexander
@SébastienDrezrez家伙这就是它!非常感谢 !!! –