如何为Django的Task模型编写Model Manager返回符合条件的QuerySet
Django自定义TaskManager修复方案
原有代码的错误点
get_queryset是管理器自带方法,漏写了执行括号,必须写成get_queryset()才能拿到可操作的查询集实例- Django ORM跨关联表查询不能用点语法,也不能直接写模型类名,要使用你在Task模型里定义的关联字段名+双下划线
__的格式:- 关联Charity的user字段写法为
charity__user - 关联assigned_benefactor的user字段写法为
assigned_benefactor__user
- 关联Charity的user字段写法为
- 多条件的或逻辑不能用Python原生的
or关键字,需要导入Django的Q对象,多个Q之间用|运算符连接表示或逻辑
最终可用代码
首先需要先在models.py头部导入Q对象:
from django.db.models import Q
然后修改TaskManager的代码如下,注意TaskManager必须定义在Task模型的前面,否则会报未定义错误:
class TaskManager(models.Manager): def all_related_tasks_to_user(self, user): return self.get_queryset().filter( Q(charity__user=user) | Q(assigned_benefactor__user=user) | Q(state='P') )
使用示例
调用时直接通过Task的管理器调用即可:
# 传入user实例就能拿到符合条件的任务列表 tasks = Task.objects.all_related_tasks_to_user(request.user)
内容的提问来源于stack exchange,提问作者abolfazlmalekahmadi
相关产品推荐
相关产品推荐

