python - 如何在 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()
方法的定义,我们或许可以为您提供帮助。
推荐阅读
- pytorch - 为什么torch.cuda.device的设备参数可能大于torch.cuda.device_count()?
- lua - 如何使一行代码在循环中运行一次,并且只运行下一行代码,直到前一行运行一次?
- javascript - 将 NProgress 与“React.lazy”一起使用
- c# - “System.IO.File”不包含“ReadLines”的定义
- node.js - 在 Azure AppService 中运行 Angular 应用程序时可能导致“ng:未找到”的原因是什么?
- java - 加载大量文本时加快附加到java swing中的jTextArea
- c# - for (var i = 0; i < count; i++) { } == for (var i = 0; i < count; i++) { }。这是什么符号,为什么要使用它?
- javascript - 我不断收到“不变式失败:浏览器历史记录需要 DOM”错误
- php - $this->_objectProperty 中的下划线是什么意思?
- xml - 解决语法错误,将 XML 内容传输到访问表时缺少运算符