如何使用 django 在一个查询中实现逻辑 AND 和 OR 运算符
How to implement logical AND and OR operator in one query using django
我想在我的 Django 查询中实现 AND 和 OR 逻辑,但在检查了很多帖子并进行搜索后,我发现我无法在同一个查询过滤器中实现 AND-OR 逻辑。
这是我想要实现的目标
我想获取具有键 ABC AND 值 Value1 OR Values2 OR Values3 AND 键 CDE AND 值 Value4
的记录
我正在使用 python3.6, django1.11, mongoengine, and 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"
from mongoengine.queryset.visitor import Q
records = MyModel.objects.get(Q(key__exact='ABC'),
Q(Value__exact='Value1') | Q(Value__exact='Value2') | Q(Value__exact='Value3', Q(key__exact='CDE'), Q(Value__exact='Value4')))
您可以使用 Q
对象,该对象在 docs 中提到。例如:
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
此代码等同于:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
我想在我的 Django 查询中实现 AND 和 OR 逻辑,但在检查了很多帖子并进行搜索后,我发现我无法在同一个查询过滤器中实现 AND-OR 逻辑。
这是我想要实现的目标
我想获取具有键 ABC AND 值 Value1 OR Values2 OR Values3 AND 键 CDE AND 值 Value4
的记录我正在使用 python3.6, django1.11, mongoengine, and 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"
from mongoengine.queryset.visitor import Q
records = MyModel.objects.get(Q(key__exact='ABC'),
Q(Value__exact='Value1') | Q(Value__exact='Value2') | Q(Value__exact='Value3', Q(key__exact='CDE'), Q(Value__exact='Value4')))
您可以使用 Q
对象,该对象在 docs 中提到。例如:
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
此代码等同于:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')