我使用的是Django 3.2和Django Rest Framework 3.12.2。我们有一些自定义的OrderingFilters,它们覆盖OrderingFilter
并操作接收到的查询集。
我们重写OrderingFilter
的get_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 ...")
型
在某种程度上是可能的吗?
1条答案
按热度按时间6qftjkof1#
我可能误解了你想做的事情,但这是我在类似情况下所做的:
你可以从你的queryset对象中获取实际的SQL命令,如下所示:
字符串
sql_command
变量保存将要发送到数据库的实际字符串。您可以根据需要对该字符串进行其他更改。然后使用已更新的sql_command
字符串进行原始查询。这可能不是你想要的,但这是你能得到的最接近的东西。