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

a2mppw5e  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(120)

我尝试了大约25 Stackoverflow链接,似乎没有人有一个工作的解决方案,这个问题。
我创建了一个自定义查询集,如下所示:

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()

我总是得到这个错误:
属性错误:'ManyRelatedManager'对象没有属性'get_active'
到目前为止,我已经尝试过:
1.我读到管理器类中的use_for_related_fields = True被弃用了。在django v2.1上不起作用
1.在我的模型中加入这个,就像一半的互联网用户说的:
类项目(模型.模型):...对象=项目管理器()

class Meta:
    base_manager_name = 'objects'

1.尝试避免RelatedManager并使用查询集:
所有的项目。
你知道我做错了什么吗?我该怎么解决这个问题?不会太难吧?

mzmfm0qo

mzmfm0qo1#

正如文档所说,“在查询相关模型时不使用基管理器”。他们给予的例子是朝着另一个方向前进,即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()

相关问题