Django объединить два набора запросов - PullRequest
0 голосов
/ 29 апреля 2020

Моя модель:

 class Renewal(models.Model):
    policy_number = models.integerField()
    invitation_date = models.DateTimeField()

Снимок моей таблицы выглядит следующим образом:

id  policy_number     invitation_date 
86  4353    2020-04-21 16:37:39.071941
87  4354    2020-04-21 16:38:16.082238
97  4355    2020-04-21 17:18:03.997882
99  4377    2020-04-21 17:26:58.414530
162 4218    2020-04-22 18:42:23.066879
167 4218    2020-04-22 18:29:10.571033
171 4218    2020-04-22 18:39:17.546550
175 4238    2020-04-23 17:35:54.444945
176 4238    2020-04-23 17:36:01.482819
177 4239    2020-04-23 17:42:15.056850
178 4238    2020-04-24 13:00:06.886101
179 4243    2020-04-24 13:00:32.098504
180 4241    2020-04-24 13:21:31.215547
181 4360    2020-04-29 13:48:18.765400

, по моим представлениям, я пытаюсь получить policy_number в заданном диапазоне дат следующим образом

def some_function(request):
    start_date = datetime.date.today()
    end_date = start_date - datetime.timedelta(days=5)

    renewals = Renewal.objects.filter(invitation_date__gt=end_date, invitation_date__lte=start_date)
    print(renewals)

что я получаю: [4238, 4243, 4241] ожидаемый ответ: [4238, 4243, 4241, 4360]

в идеале это должно дать мне все записи обновления, созданные за последние 5 дней. Однако если сегодня 2020-04-29, последняя запись политики должна была быть 4360, но моя последняя запись политики 4241

1 Ответ

1 голос
/ 29 апреля 2020

Ваше продление с policy_number = 4360 имеет приглашение_дата = 2020-04-29 13: 48: 18.765400 , так что если сегодня 2020-04- 29, тогда ваша start_date будет 2020-04-29 00: 00: 00.0000, поэтому, если вы хотите выполнить это обновление, вы можете сделать start_date = datetime.datetime.combine(datetime.datetime.now(), datetime.time.max), если хотите сохранить invitation_date__lte=start_date, если нет , вы можете взять на следующий день и сделать invitation_date__lt=start_date

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