Как фильтровать в Django и использовать метод класса в качестве условия?

Я хочу получить набор запросов, содержащий только тех репетиторов, которые удовлетворяют минимальным требованиям. В классе тьютора есть метод "satisfies_min_requirements(self, student) -> bool". В основном он определяет, подходит ли репетитор для ученика.

У меня есть подход, который работает, но я думаю, что должен быть лучший способ сделать это. Вот что у меня есть:

tutors = Tutor.objects.all()

tutors = list(filter(lambda tutor : tutor.satisfies_min_requirements(student), tutors))

Это функция:

def satisfies_min_requirements(self, student: Student):    
    self_subjects = self.get_subjects()
    student_subjects = student.get_subjects()

    is_shared_subjects = False
    for stud_subj in student_subjects:
     if self_subjects.count(stud_subj) > 0:
       is_shared_subjects = True
       break

    if not is_shared_subjects: return False

    self_tut_places = self.get_tutoring_places()
    student_tut_places = student.get_tutoring_places()

    is_shared_places = False
    for student_place in student_tut_places:
      if self_tut_places.count(student_place) > 0:
        is_shared_places = True
        break

    if not is_shared_places: return False

    if self.get_distance(student.get_coordinates()) > 30: return False

    return True

Большое спасибо!

К сожалению, вы не можете этого сделать, если только не найдете способ выразить ваш satisfies_min_requirements метод как SQL или выражение Django ORM.

Если вы готовы поделиться определением метода satisfies_min_requirements(), мы, возможно, сможем помочь вам с этим.

Вернуться на верх