Django为RelatedManag创建自定义查询集

2024-06-16 13:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了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()

我总是遇到这样的错误:

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

到目前为止我试过的: 1) 我读到manager类中的use_for_related_fields = True已被弃用。在django v2.1上无论如何都不起作用

2)将此添加到我的模型中,因为一半的internet声明:

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

   class Meta:
       base_manager_name = 'objects'

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

employee.projects.all().get_active()

你知道我做错了什么吗?我该怎么解决这个问题呢?不会太难吧?你知道吗

谢谢!
罗恩


Tags: 模型selfprojecttruegetreturnobjectsmodels
1条回答
网友
1楼 · 发布于 2024-06-16 13:04:14

正如the docs state,“在查询相关模型时不使用基本管理器”。他们举的例子是往另一个方向走,即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()

相关问题 更多 >