首页 > 解决方案 > 如何在 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

十分感谢!

标签: pythondjangodjango-modelsdjango-queryset

解决方案


不幸的是,你不能这样做,除非你找到一种方法将你的satisfies_min_requirements方法表达为 SQL 或 Django ORM 表达式。

如果您愿意分享该satisfies_min_requirements()方法的定义,我们或许可以为您提供帮助。


推荐阅读