【问题标题】:Django override manager in admin管理员中的 Django 覆盖管理器
【发布时间】:2016-09-04 10:37:40
【问题描述】:

我有一个使用自定义管理器的模型:

class ProjectManager(models.Manager):
    def get_queryset(self):
        return super(ProjectManager, self).get_queryset() \
            .exclude(archived_date__isnull=False)


class Project(models.Model):
    objects = ProjectManager()
    archived_date = models.DateTimeField(null=True, blank=True)

但我还没有找到在管理中显示所有项目的方法。

我的管理员定义如下:

class ProjectAdmin(admin.ModelAdmin):
    model = Project

我尝试在ProjectAdmin 类中使用get_queryset,但我无法找到取回所有项目的方法。

你知道怎么做吗?

【问题讨论】:

    标签: django model django-admin


    【解决方案1】:

    您需要将经理设置为默认经理。

    objects = ProjectManager() # The default manager.
    

    来源:https://docs.djangoproject.com/en/1.9/topics/db/managers/#modifying-a-manager-s-initial-queryset

    编辑:

    这可能不是最好的解决方案,但这会奏效。

    models.py:

    class Project(models.Model):
        objects_unfiltered = models.Manager()
    

    admin.py

    class ProjectAdmin(admin.ModelAdmin):
        model = Project
    
        def get_queryset(self, request):
            return self.model.objects_unfiltered.all()
    
    admin.site.register(Project, ProjectAdmin)
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多