相册

Django 数据库多参数检索

Django很方便,基本我们只要关注域模型就可以。下面以三个域模型为例介绍多参检索。
我用到三个域模型,如下所示:

- BasicInfo
- ProcessInfo
- CustomValue

User

Project_basic

Project_process

Project_peng

User

U:PB=1:n

U:PP=1:n

Project_basic

PB:U=n:1

PB:PP=1:n

Project_process

PP:PB=n:1

Project_peng

PP:U=n:1

CustomValue在多个域模型中都会用到,就是一些常用类型的定义。
系统根据CustomValue的类型和项目基本信息中的项目名称检索项目信息:

我们检索项目类型,项目当前状态和项目名称,具体代码如下所示:

def list_pass_bs(request):
    typevalues = CustomValue.objects.filter(typename='project_type')
    statevalues = CustomValue.objects.filter(typename='project_state')
    basicinfo_list = BasicInfo.objects.filter(pb_approval_state_id=11)
    if request.method=='POST':
        type_id=int(request.POST['type'])
        state_id=int(request.POST['state'])
        name=request.POST['name'].strip()
        args={'pb_approval_state_id':11}
        if type_id != 0:
            args['pb_type_id']=type_id
        if state_id != 0:
            args['pb_state_id']=state_id
        if len(name)>0:
            args['pb_name__contains']=name
        basicinfo_list=BasicInfo.objects.filter(**args)
        return render(request, 'project/list_pass_bs.html', {'typevalues': typevalues,
                                                             'statevalues': statevalues,
                                                             'basicinfo_list': basicinfo_list,
                                                             'type_id':type_id,
                                                             'state_id':state_id,
                                                             'name':name})
    else:
        return render(request, 'project/list_pass_bs.html', {'typevalues': typevalues,
                                                             'statevalues': statevalues,
                                                             'basicinfo_list': basicinfo_list})

这里用到了字典,根据用户的检索条件,进行判断,然后将字段加入到字典中,再传值给filter,可以说是万能字典。

发表评论