Django 数据库多条件查询

2,045 阅读1分钟

背景

在实际项目中,我们会遇到前端传过来的查询条件不固定的情况,我们不好用固定的查询条件去处理。
如下图,很多条件会是空值,而且每次传过来有值的条件不一样,我们需要将有值的条件筛选出来。

那么,怎么筛选以及筛选后得到的条件数据怎么用来查询呢?

解决思路

因为用户未选择的查询字段的值是空值或空字符串,我们可以遍历所有字段,筛选出查询条件,保存在字典中,查询时利用**操作符对字典进行解引用,即可达到我们想要的效果。

// 遍历筛选
def getKwargs(data={}):
    kwargs = {}
    for (k, v) in data.items():
        if v is not None and v != "":
            kwargs[k] = v
    return kwargs

查询示例

# 获取前端传过来的数据
projectName = request.POST["projectName"]
if projectName:
    project = Project.objects.get(user=user, projectName=projectName)
else:
    project = ""

user = User.objects.get(userId=userId)
startTime = request.POST["startTime"]
endTime = request.POST["endTime"]

# 将传过来的查询条件封装成字典形式,键名为数据库中对应的字段
# 如果是json数据就使用dictCheck=json.loads(data)
dictCheck = {"user": user, "project": project, "createTime__gt": startTime, "createTime__lt": endTime}
dictFor = getKwargs(dictCheck)
#利用**解引用,进行数据条件查询
tasks = RecognitialTask.objects.filter(**dictFor)