Как получить данные для заданного поискового запроса

У меня есть таблица для отношений 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   

Когда я запускаю этот запрос, он выполняет цикл только один раз для одного дня, но не для нескольких дней.

enter image description here

enter image description here

Как мне запустить этот запрос, чтобы он не останавливался после одного цикла.

После одного цикла появляется сообщение: Произошло исключение Произошло исключение

Я пытался применить здесь блок 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)
Вернуться на верх