Как фильтровать в 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()
, мы, возможно, сможем помочь вам с этим.