在Django管理后台中设置自定义SQL

3

我正在尝试在Django管理中设置代理模型。它将代表原始模型的一个子集。来自models.py的代码:

class MyManager(models.Manager):
    def get_query_set(self):
        return super(MyManager, self).get_query_set().filter(some_column='value')

class MyModel(OrigModel):
    objects = MyManager()
    class Meta:
        proxy = True

现在我需要使用带有JOIN的复杂SELECT语句,而不是filter()。将其完整地注入到自定义管理器中的正确方法是什么?
2个回答

2
Django提供了extra() QuerySet修改器,它是将特定子句注入QuerySet生成的SQL的钩子。
这可用于复杂情况,可能需要一个或多个附加查询。

1

如果你想在MyModel.objects中进一步使用ORM,则 raw SQL并不是一个解决方案。在使用原始SQL的情况下,提供了一个迭代器。

你不能对MyModel().objects进行任何链式操作,如filter、exclude等。如果在管理员中可以进行这样的操作,例如筛选,在其中将无法工作。如果你需要这些功能,你唯一的选择就是不在你的管理器get_query_set方法中使用原始SQL。

我不知道Manager.raw在管理员中是否可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接