django - 为 RelatedManager 创建自定义查询集

django - Creating custom queryset for RelatedManager

我尝试了大约 25 个 Whosebug 链接,但似乎没有人对这个问题有可行的解决方案。

我创建了一个这样的自定义查询集:

class ProjectQuerySet(models.QuerySet):
   def get_active(self):
       from apps.projectmanagement.models import Project
       return self.filter(active=True)

class ProjectManager(models.Manager):
  def get_queryset(self):
      return ProjectQuerySet(self.model, using=self._db)

如果我从像

这样的模型开始,这会很好用
Project.objects.get_active()

但是如果我想在关系中使用它,到目前为止运气不好:

employee.projects.get_active()

我总是遇到这个错误:

AttributeError: 'ManyRelatedManager' object has no attribute 'get_active'

到目前为止我尝试过的: 1) 我读到经理 class 中的 use_for_related_fields = True 已弃用。在 django v2.1

上无论如何都不起作用

2) 在我的模型中添加这个,因为有一半的互联网指出:

class Project(models.Model):
   ...
   objects = ProjectManager()

   class Meta:
       base_manager_name = 'objects'

3) 尝试避免 RelatedManager 并使用查询集:

employee.projects.all().get_active()

知道我做错了什么吗?我将如何解决这个问题?不能太难吧?

谢谢!
罗恩

the docs state、"Base managers aren’t used when querying on related models"。他们给出的例子是朝另一个方向发展,即project.employee.

没有办法让经理自己来做到这一点。最好的办法是在你的模型上定义一个方法:

class Employee(models.Model):
    ...
    def get_active_projects(self):
        return self.projects.filter(active=True)
        # or
        return Project.objects.filter(employee=self).get_active()