我試圖通過它們的'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日的任何內容,這可能不是您想要的內容。 –