0

原始查询本身是正确的,我能够从数据库中检索原始查询集。我需要将其转换为查询集以进行进一步处理,并且我面临以下错误。

创建相应的 django 查询对我来说很难,这就是为什么我创建 SQL 查询,获取原始查询集,现在尝试将其转换为查询集以进行进一步处理。

为了匿名,我更改了 django 模型名称和表名称。

这是我在 django shell 中尝试的输出。“test3.value”将被动态设置,我在原始查询语句中这样做。

from django.db.models.expressions import RawSQL
from xyz.models import *
value = '1.2.3.4'
queryset = Test1.objects.filter(id__in=RawSQL("SELECT DISTINCT ON (test1.start_time, test1.id) test1.id, test1.name, test1.start_time FROM test1 WHERE EXISTS (SELECT * FROM test2 JOIN test3 ON test2.test3_id = test3.id AND test3.value = {} JOIN test4 ON test2.test4_id = test4.id AND test4.test1_id = test1.id) ORDER BY test1.start_time DESC".format(value)))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'params'

为了便于阅读,我已经格式化了上面使用的原始 sql 查询。

SELECT
  DISTINCT ON (test1.start_time, test1.id)
  test1.id,
  test1.name,
  test1.start_time
FROM
  test1
WHERE
  EXISTS (
    SELECT
      *
    FROM
      test2
      JOIN test3 ON test2.test3_id = test3.id
      AND test3.value = {}
      JOIN test4 ON test2.test4_id = test4.id
      AND test4.test1_id = test1.id
  )
ORDER BY
  test1.start_time DESC.format(value)
4

0 回答 0