Как получить данные для заданного поискового запроса
У меня есть таблица для отношений ManyToMany. Где каждый репетитор должен ввести несколько дней, в которые он хочет заниматься с учеником. Например:
Availability Tutor:
user available_day time
t1 Sun 6,7,8
t2 mon 3,4
t1 mon 1,2
Я хотел бы получить всех репетиторов, доступность которых зависит от дня поиска.
Модель:
class TutorProfile(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
tutor_availablility = models.ManyToManyField(
Day)
queryset:
def get_queryset(self):
subject_param = self.request.GET.get('subject')
bookday = self.request.GET.get('book_day')
grade = self.request.GET.get('grade')
li = list(bookday.split(","))
print("Book Info:", li)
for i in range(len(li)):
print(li[i])
_day_name = datetime.strptime(li[i], "%d-%m-%Y").strftime("%A")
print("Day Name:", _day_name)
day_num = Day.objects.get(day_name=_day_name)
print("Day_Num",day_num)
result = TutorProfile.objects.filter(
tutor_availablility=day_num).all()
return result
Когда я запускаю этот запрос, он выполняет цикл только один раз для одного дня, но не для нескольких дней.
Как мне запустить этот запрос, чтобы он не останавливался после одного цикла.
После одного цикла появляется сообщение: Произошло исключение Произошло исключение
Я пытался применить здесь блок try catch. Но не получил никакой подсказки. Почему цикл останавливается после одного цикла?
После одного цикла вы возвращаете результаты. Вместо этого используйте объект Q для хранения условий, а затем отфильтруйте набор запросов вне цикла for:
from django.db.models import Q
...
query = Q()
for i in range(len(li)):
_day_name = datetime.strptime(li[i], "%d-%m-%Y").strftime("%A")
day_num = Day.objects.get(day_name=_day_name)
qeury = query | Q(
tutor_availablility=day_num)
return TutorProfile.objects.filter(query)
Update
Хотя следующий код не должен изменить результат, но попробуйте так:
li = list(bookday.split(","))
query = list(map(lambda x: datetime.strptime(x, "%d-%m-%Y").strftime("%A"), li)
return TutorProfile.objects.filter(tutor_availability__day_name__in = query)