如何在Django模型中绕过自定义ModelManager

时间:2014-08-15 06:34:35

标签: django django-models

我正在处理现有项目,其中已为模型类定义了自定义管理器。此Manager向查询添加一些其他查询/连接。例如,使用pk对模型进行简单的get查询包括检查地址。

我无法运行简单查询,因为这会使地址表与某些逻辑连接,如果地址不匹配,则不会返回记录。

business = Business.objects.get(pk=id)

我可以以某种方式绕过此自定义管理器并执行简单的Select * from business where id=id查询吗?

2 个答案:

答案 0 :(得分:1)

首先,您可以采取两种方式。 Raw sql

business = Business.objects.raw("Select * from business where id={0}".format(pk))

或者如果您想要调用您的经理超级类,假设您的自定义管理器被称为BusinessManager

business = super(BusinessManager, Business.objects).get(pk=id)

但是作为good practice,您永远不应该覆盖正常的objects属性,应该保持原样。

答案 1 :(得分:0)

您可以在不使用django ORM的情况下编写RAW SQL查询。只需安装一个库就可以直接在数据库上执行SQL查询。

您也可以尝试在Django中编写Raw SQL,但它可能无法解决您的问题:https://docs.djangoproject.com/en/1.6/topics/db/sql/

编辑:好吧我似乎错了,它实际上可以解决你的问题:https://docs.djangoproject.com/en/1.6/topics/db/sql/#executing-custom-sql-directly