Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
如何使用django在一个查询中实现逻辑AND和OR运算符_Django_Python 3.x_Mongoengine - Fatal编程技术网

如何使用django在一个查询中实现逻辑AND和OR运算符

如何使用django在一个查询中实现逻辑AND和OR运算符,django,python-3.x,mongoengine,Django,Python 3.x,Mongoengine,我希望在Django查询中实现AND和OR逻辑,但在检查了大量帖子和搜索后,我发现我无法在同一个查询过滤器中实现AND和OR逻辑 这就是我想要实现的目标 我想获取具有关键ABC和值Value1或Values2或Values3以及关键CDE和值Value4的记录 我使用的是python3.6、djang1.11、mongoengine和MongoDB filter = [ { "Key": "ABC", "Values": ["Value1", "Value2", "Value3"]}, { "

我希望在Django查询中实现AND和OR逻辑,但在检查了大量帖子和搜索后,我发现我无法在同一个查询过滤器中实现AND和OR逻辑

这就是我想要实现的目标

我想获取具有关键ABC和值Value1或Values2或Values3以及关键CDE和值Value4的记录

我使用的是
python3.6、djang1.11、mongoengine和MongoDB

filter =  [ { "Key": "ABC", "Values": ["Value1", "Value2", "Value3"]}, { "Key": "CDE", "Values": ["Value4"]} ]
答复:

[  
    {
        "_id" : ObjectId("5ebd29286310619f046ba866"),
        "account_id" : "12",
        "key" : "ABC",
        "Value" : "Value1"
    }

    {
        "_id" : ObjectId("5ebd29286310619f046ba866"),
        "account_id" : "12",
        "key" : "ABC",
        "Value" : "Value2"
    }

    {
        "_id" : ObjectId("5ebd29286310619f046ba866"),
        "account_id" : "12",
        "key" : "ABC",
        "Value" : "Value3"
    }

    {
        "_id" : ObjectId("5ebd29286310619f046ba866"),
        "account_id" : "12",
        "key" : "CDE",
        "Value" : "Value4"
    }

]
这是我已经尝试过的,但出现错误mongoengine.errors.InvalidQueryError:无法解析字段“key”


您可以使用
Q
对象,如中所述。例如:

Poll.objects.get(
Q(问题从谁开始),
Q(发布日期=日期(2005,5,2))| Q(发布日期=日期(2005,5,6))
)
该代码相当于:

SELECT * from polls WHERE question LIKE 'Who%'
    AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

您好@Deniz感谢您的回复,我尝试过这个,但我遇到了一个错误。我添加了我尝试过的代码,请注意,我使用的是mongoengine Q和Django QI think是关于“Key”的大写字母“K”,您可以尝试使用
Q(Key_u-exact='CDE')
?但是我有字段Key和Key,我也尝试过这个,正如错误所示,它不起作用,关键字段不匹配。可能您的模型定义和数据库方案不一样。它可能会导致此错误。这个答案可能会帮助你:
SELECT * from polls WHERE question LIKE 'Who%'
    AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')