Django在现有查询集上运行原始SQL

h9a6wy2h  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(75)

我使用的是Django 3.2和Django Rest Framework 3.12.2。我们有一些自定义的OrderingFilters,它们覆盖OrderingFilter并操作接收到的查询集。
我们重写OrderingFilterget_ordering()函数:

def get_ordering(self, request, queryset, view):

字符串
到目前为止,我们使用了一些django的查询集功能。现在,我想运行一个原始SQL作为排序过程的一部分。据我所知,我们可以做一些像-

MyModel.objects.raw("select * from my_model.....")


问题是,正如我所看到的,我们只能从整个表(在这种情况下是my_model)中选择,而不是从已经准备好的查询集中选择。
我想做的是-

query_set = MyModel.objects.filter(created_at='2023.03.07')
raw_query_set = query_set.raw("select * from query_set ...")


在某种程度上是可能的吗?

6qftjkof

6qftjkof1#

我可能误解了你想做的事情,但这是我在类似情况下所做的:
你可以从你的queryset对象中获取实际的SQL命令,如下所示:

query_set = MyModel.objects.filter(created_at='2023.03.07')
sql_command = str(queryset.query)

字符串
sql_command变量保存将要发送到数据库的实际字符串。您可以根据需要对该字符串进行其他更改。然后使用已更新的sql_command字符串进行原始查询。
这可能不是你想要的,但这是你能得到的最接近的东西。

相关问题