我为Django模型创建了一个自定义管理器,该管理器返回一个包含Objects.all()子集的QuerySet。我需要将其作为模型的默认管理器,因为我还将创建一个自定义标签,该标签将从任何模型(由参数指定)中检索内容,并且需要对指定模型使用默认管理器。一切正常,除了-
Django Admin还使用此特定模型的默认管理器,这意味着并非所有模型实例都出现在admin中。
Django文档无济于事:
如果使用自定义Manager对象,请注意,第一个Django Manager
Django遇到(按在模型中定义的顺序)具有特殊状态。Django将在类中定义的第一个Manager解释为“默认”
Manager,并且Django的多个部分( 尽管不是admin应用程序 )将对该模型专门使用该Manager。 (Django
Managers文档)
管理员不应该使用默认的管理器,但是就我而言。请注意,我还明确添加了默认的Manager objects
:
subset = CustomManager() # the default manager
objects = models.Manager() # the one I want admin to use
如何指定管理员应使用哪个Manager?
您可以通过覆盖queryset
ModelAdmin子类中的方法来选择管理器。
def get_queryset(self, request):
# use our manager, rather than the default one
qs = self.model.objects.get_queryset()
# we need this from the superclass method
ordering = self.ordering or () # otherwise we might try to *None, which is bad ;)
if ordering:
qs = qs.order_by(*ordering)
return qs
本文向大家介绍Django中自定义模型管理器(Manager)及方法,包括了Django中自定义模型管理器(Manager)及方法的使用技巧和注意事项,需要的朋友参考一下 1.自定义管理器(Manager) 在语句Book.objects.all()中, objects 是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个manager,你可以创建
问题内容: 在要显示已注册模型的管理站点的根页面上,我想隐藏已注册到Django admin的多个模型。 如果我直接注销这些记录,由于添加新符号“ +”消失了,因此我无法添加新记录。 如何才能做到这一点 ? 问题答案: 基于x0nix的答案,我做了一些实验。似乎从返回空会将模型从index.html中排除,同时仍然允许你直接编辑实例。
问题内容: 你可以像在Django管理员中为字段和模型赋予冗长的名称一样,可以给应用程序自定义名称吗? 问题答案: Django 1.8以上 根据1.8文档(和当前文档), 新应用程序应避免使用。相反,它们应要求在中显式配置指向适当子类的虚线路径。 例: 然后AppConfig如下所示更改你的。 的Django 1.7 正如rhunwicks对OP的评论所言,自Django 1.7起,这已成为可能
我有一个Java7/Spring3.2.17应用程序,它必须连接到两个不同的数据库,因此我有两个不同的persistence.xml文件,每个文件都声明自己的持久性单元。 在我的DAO类中,我只是让Spring注入实体管理器: Spring抱怨我有两个EM工厂,所以它不知道该用哪一个: NouniqueBeanDefinitionException:未定义[javax.persistence.En
给出了以下配置: 我需要一个存储库来访问电影,看起来有点像这样: 是否有一种注释驱动的方法来告诉存储库要使用哪个模板?如果没有,还能做些什么来解决这个问题?
问题内容: 我正在尝试使用默认的Django admin创建一个简单的照片库。我想为每个画廊保存一张样本照片,但我不想保留filname。除了文件名,我想保存模型的ID()。但是,第一次我要保存该对象时,该ID不存在。我如何知道模型中的下一个自动增量,或者以某种方式保存模型数据(在存在文件时上传之前和之后)?有没有很酷的解决方案? 像这样: 也许将文件名存储在其他字段中。 问题答案: 图像文件将在