Как мне фильтровать по диапазону дат на основе значения словаря в python, иначе фильтровать список по словарю? - PullRequest
1 голос
/ 12 января 2012

У меня есть словари, которые выглядят так:

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, и обрезая итерации каждогозапись на дату, указанную в date_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 голосов
/ 12 января 2012

Кажется, теперь я понимаю. Я предполагаю, что 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 отношения.

Надеюсь, это сработает, если нет, можете ли вы выложить код для ваших моделей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...