Проверить диапазон дат с использованием Q класса в Python
Я запутался, я пытаюсь проверить попадает ли диапазон дат создаваемой записи в диапазоны дат уже существующих записей, и отсеять их.
from django.db.models import Q
start = request.POST['start_date']
end = request.POST['end_date']
gpu = request.POST['id_gpu']
group = Group.objects.filter(id_gpu=gpu)
q = (Q(start_date__lte=start) & Q(end_date__gte=start)) |
(Q(start_date__lte=end) & Q(end_date__gte=end))
groups = group.exclude(q)
print('q = ', q)
print('group.query = ', group.query)
print('groups = ', groups)
print('groups.query = ', groups.query)
error2 = None
if not groups:
error2 = 'На указанные даты проведения работ уже существует группа работ по выбранному оборудованию'
if request.POST.get('save') and form.is_valid() and groups:
just_created = form.save(commit=False)
Через print
я получил следующий результат, мне не удалось отсеять даты попадающие в диапазон, подскажите, пожалуйста, что не так:
q = (OR: (AND: ('start_date__lte', '2022-09-13'), ('end_date__gte', '2022-09-13')), (AND: ('start_date__lte', '2022-09-14'), ('end_date__gte', '2022-09-14')))
group.query = SELECT "Group"."id_group", "Group"."id_filial_id", "Group"."id_cs_id", "Group"."id_gpu_id", "Group"."name_group", "Group"."short_description", "Group"."creation_date", "Group"."date_of_change", "Group"."start_date", "Group"."end_date", "Group"."Create_User" FROM "Group" WHERE "Group"."id_gpu_id" = 8
groups = <QuerySet [<Group: Qui ex exercitationem dolores neque quo molestiae fugit quasi nemo et officia nesciunt>, <Group: Quod in dolore modi iste do>, <Group: Dolorum ut beatae dolor veniam laborum Ut proident explicabo Esse esse quibusdam consectetur quos aliqua Dolor ab deleniti>, <Group: Recusandae Necessitatibus eaque et at est est reprehenderit dolorem incidunt accusantium nesciunt>]>
groups.query = SELECT "Group"."id_group", "Group"."id_filial_id", "Group"."id_cs_id", "Group"."id_gpu_id", "Group"."name_group", "Group"."short_description", "Group"."creation_date", "Group"."date_of_change", "Group"."sta
rt_date", "Group"."end_date", "Group"."Create_User" FROM "Group" WHERE ("Group"."id_gpu_id" = 8 AND NOT ((("Group"."start_date" <= 2022-09-13 AND "Group"."start_date" IS NOT NULL AND "Group"."end_date" >= 2022-09-13 AND "Group"."end_date" IS NOT NULL) OR ("Group"."start_date" <= 2022-09-14 AND "Group"."start_date" IS NOT NULL AND "Group"."end_date" >= 2022-09-14 AND "Group"."end_date" IS NOT NULL))))
models.py
class Group(models.Model):
id_group = models.AutoField(primary_key=True)
start_date = models.DateField(auto_now=False, blank=True, null=True)
end_date = models.DateField(auto_now=False, blank=True, null=True)
start = request.POST['start_date']
end = request.POST['end_date']
gpu = request.POST['id_gpu']
group = Group.objects.filter(id_gpu=gpu)
q = (Q(start_date__lte=start) & Q(end_date__gte=start)) | (Q(start_date__lte=end) & Q(end_date__gte=end))
groups = group.filter(q)
error2 = None
if groups:
error2 = 'На указанные даты проведения работ уже существует группа работ по выбранному оборудованию'
if request.POST.get('save') and form.is_valid() and not groups:
just_created = form.save(commit=False)