Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:自引用foreignkey字段的exists语句上的模型查找_Python_Django_Postgresql - Fatal编程技术网

Python Django:自引用foreignkey字段的exists语句上的模型查找

Python Django:自引用foreignkey字段的exists语句上的模型查找,python,django,postgresql,Python,Django,Postgresql,我正在尝试搜索自引用外键字段中大于或小于值的项目 在direct SQL中非常简单(下面的语句是由Django QuerySet生成的,除了我添加的和EXISTS语句): 选择* 来自“型号和变型” 内部连接“make\u和\u body\u type” 在(“型号和变体”“id”“制造”“类型”“制造”“主体”“类型”“id”) 左外连接“型号和变型”T3 ON(“型号和变量”。“id型号”=T3。“id”) 哪里 “make_和_body_type”。“slug”=“car” 存在( 从“型

我正在尝试搜索自引用外键字段中大于或小于值的项目

在direct SQL中非常简单(下面的语句是由Django QuerySet生成的,除了我添加的和EXISTS语句):

选择*
来自“型号和变型”
内部连接“make\u和\u body\u type”
在(“型号和变体”“id”“制造”“类型”“制造”“主体”“类型”“id”)
左外连接“型号和变型”T3
ON(“型号和变量”。“id型号”=T3。“id”)
哪里
“make_和_body_type”。“slug”=“car”
存在(
从“型号和变型”TX中选择*
其中TX.“id_model”=“model_和_variant”。“id”
按TX“id”分组

最小值(TX“ex_展厅价格”)大于200000,最大值(TX“ex_展厅价格”)为200000,最大值(TX“ex_展厅价格”)我使用QuerySet.extra()方法找到了解决方案

使用:

extra_where = """
EXISTS (
    SELECT * FROM "model_and_variant" TX
    WHERE TX."id_model" = "model_and_variant"."id"
    GROUP BY TX."ex_showroom_price"
    HAVING MIN(TX."ex_showroom_price") > 200000 AND MAX(TX."ex_showroom_price") <= 500000
)
"""

results = AbcModel.objects.select_related(*select_related).filter(**filters) \
    .extra(where=[extra_where])
extra_其中=”“”
存在(
从“型号和变型”TX中选择*
其中TX.“id_model”=“model_和_variant”。“id”
德克萨斯州分组“ex_展厅价格”
最小值(TX“ex_展厅价格”)大于200000,最大值(TX“ex_展厅价格”)
-- ...
AND EXISTS (
    SELECT * FROM "model_and_variant" TX
    WHERE TX."id_model" = "model_and_variant"."id"
    GROUP BY TX."id"
    HAVING MIN(TX."ex_showroom_price") > 200000 AND MAX(TX."ex_showroom_price") <= 500000
)
extra_where = """
EXISTS (
    SELECT * FROM "model_and_variant" TX
    WHERE TX."id_model" = "model_and_variant"."id"
    GROUP BY TX."ex_showroom_price"
    HAVING MIN(TX."ex_showroom_price") > 200000 AND MAX(TX."ex_showroom_price") <= 500000
)
"""

results = AbcModel.objects.select_related(*select_related).filter(**filters) \
    .extra(where=[extra_where])