我试图通过它们的'due'字段对对象'Event'进行分组,最后返回一个字典型的字典当天的事件清单。 {'Monday':[SomeEvent,SomeOther]} - 这就是主意。然而在查找事件的due__day我得到:int() argument must be a string, a bytes-like object or a number, not datetime.datetime.
这里的经理代码:Django无法查找日期时间字段。 int()参数必须是一个字符串,类似字节的对象或数字,而不是datetime.datetime
# models.py
class EventManager(models.Manager):
def get_week(self, group_object):
if datetime.datetime.now().time() > datetime.time(16, 0, 0):
day = datetime.date.today() + datetime.timedelta(1)
else:
day = datetime.date.today()
friday = day + datetime.timedelta((4 - day.weekday()) % 7)
events = {}
while day != friday + datetime.timedelta(1):
events[str(day.strftime("%A"))] = self.get_queryset().filter(group=group_object, due__day=day)
# ^^^ That's where the error happens, from what I understood it tries to convert this datetime to int() to be displayed by template
day += datetime.timedelta(1)
return events
这里是模型:
# models.py
class Event(models.Model):
title = models.CharField(max_length=30)
slug = models.SlugField(blank=True)
description = models.TextField()
subject = models.CharField(max_length=20, choices=SUBJECTS)
event_type = models.CharField(max_length=8, choices=EVENT_TYPES)
due = models.DateTimeField()
author = models.ForeignKey(User, blank=True)
group = models.ForeignKey(Group, related_name='events')
objects = EventManager()
我创建了一个模板过滤器来调用这个方法:
@register.filter
def get_week(group_object):
return Event.objects.get_week(group_object=group_object)
我在event_list.html中调用它(使用索引是因为它是一个列表视图,这也只是暂时的,以查看返回的字典是否正确。 )
{{ event_list.0.group|get_week }}
我的猜测是:我打破了这个奇怪的查找的东西。 .filter(due__day=day)
但是我找不到解决方案。
我也试图寻找due__lte=(day - datetime.timedelta(hours=12)), due__gte=(day + datetime.timedelta(hours=12))
这样的事情,但这不起作用。任何解决方案都非常好,并赞赏。
请注意,'.day'只给出数字的月份。如果您的搜索是针对2016年8月12日的某些内容,则该查找将匹配* any *月12日的任何内容,这可能不是您想要的内容。 –