如何根据python中的字典值过滤日期范围,否则按字典过滤列表?

时间:2012-01-11 23:42:51

标签: python django

我有一个看起来像这样的词典:

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])  

因此字典会导致动态改变范围到引用的pk。我没有发现任何暗示这是可行或有效的,所以我猜测下一个最好的方法是通过消除日期范围过滤器创建一个列表,然后使用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 :(得分: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),其中每个键对应一个任务列表。我假设您的ForeignKeyTasks模型之间存在Client关系。

希望这有效,如果没有,请您为您的模型发布代码吗?