如何根据字典值在Python中过滤日期范围,否则根据字典过滤列表?
我有一些字典,长得像这样:
s_dates_dict = {17: datetime.date(2009,21,9,0,24), 19: datetime.datetime(2011,12,1,19,39,16), ....}
e_dates_dict = {17: datetime.date(2010,25,9,10,24), 19: datetime.datetime(2012,1,11,17,39,16), ....}
我想用这些字典来找到每条记录之后的下一个类型(A或B)的记录,时间是在某个日期之后。所以我觉得我最好是创建一个类似下面的查询:
next_record_list = Tasks.objects.filter(date__range(s_dates_dict,e_dates_dict), client__in=client_list, task_type__in=[A,B])
这样字典就能动态地改变引用的主键范围。我没有找到任何建议说这样做是可能的或者高效的,所以我猜下一个最好的办法就是先创建一个列表,去掉日期范围的过滤,然后用一个for循环遍历最旧值的字典,在dates_dict中提到的日期处停止遍历每条记录。但我也还没找到实现这个的方法。能不能给我一些建议,或者完全不同的更好的方法?谢谢。
编辑:
client_list是一个客户对象的列表。
这是一些models.py的内容:
class Client(models.Model):
user_name = models.CharField
class Task(models.Model):
client = models.ForeignKey(
'Client',
)
task_type = models.ForeginKey(
'Task_Type',
)
date = models.DateTimeField(
default = datetime.now(),
blank = True,
null = True,
)
class Task_Type(models.Model):
name = models.CharField
1 个回答
0
我想我现在明白了。我假设 client_list
实际上是一个客户对象的列表。虽然可能有人会想出更有效的解决方案,但我会尝试这样的做法:
next_record = {}
for client in client_list:
s = s_dates_dict[client.pk]
e = e_dates_dict[client.pk]
next_record[client.pk] = client.tasks_set.filter(date__range(s,e), task_type__in=[A,B])
这样你就得到了一个字典(next_record
),其中每个键对应一个任务列表。我假设你的 Tasks
和 Client
模型之间有一个 ForeignKey
的关系。
希望这个方法有效,如果不行的话,能不能请你把你的模型代码发出来?