Django在管理员中覆盖管理员

时间:2016-05-09 17:21:13

标签: django model django-admin

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

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

我尝试在get_queryset课程中使用ProjectAdmin,但我找不到办法取回所有项目。

你知道办法吗?

1 个答案:

答案 0 :(得分:2)

您需要将管理器设置为默认管理器。

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)