我遵循了this example,它工作得很好,但我想知道我是否可以加入一个异常,这样当我在管理员中时,所有对象都会显示出来(活动的和非活动的)。这可能很简单,但我在文档中找不到如何做到这一点。
下面是我的经理现在的样子:
class ShareManager(models.Manager):
def get_query_set(self):
return super(ShareManager, self).get_query_set().filter(active=True)
1条答案
按热度按时间jdgnovmf1#
脑海中浮现出以下几种解决方案:
1.使用ModelAdmin.queryset()定义要用于变更列表的查询集。
1.在您的模型上安装2个管理器,管理员找到的第一个管理器将被用作默认管理器AFAIK。
1.在仅返回活动内容的自定义管理器上添加新方法,并保留
get_query_set
的默认设置。跟进
我认为最适合你的解决方案是将#1和#2的变体结合起来。
将您的自定义管理器设置为
objects
,这样每个人都可以访问它(我认为这应该可以解决您的可重用性问题),还可以在您的模型上安装默认管理器,并在ModelAdmin.queryset()
中使用它。我也应该包括
ModelAdmin.queryset()
方法示例,所以它就在这里。注意,
qs = self.model.admin_objects.get_query_set()
行使用的是admin_objects
,它是普通管理器的示例,包括未发布的项目。此
queryset
方法的其余实现是默认的Django实现,通常称为qs = self.model._default_manager.get_query_set()
。我希望这能把事情弄清楚一点。