通过 Q 对象完成复杂查询,利用分号多条件查询
views.py
from django.shortcuts import render
from .models import Employee
from django.db.models import Q
import re
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
# 建立查询结果界面
def search_results(request):
if 'eid' in request.GET and request.GET['eid']:
#建立工号查询条件,可多条件查询
eid = request.GET['eid']
print(eid)
if ';' in eid:
eid_list = re.split(r';', eid)
if len(eid_list) == 2:
str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1])
elif len(eid_list) == 3:
str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2])
elif len(eid_list) == 4:
str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3])
elif len(eid_list) == 5:
str_list = Q(eid__contains=eid_list[0]) | Q(eid__contains=eid_list[1]) | Q(eid__contains=eid_list[2]) | Q(eid__contains=eid_list[3]) | Q(eid__contains=eid_list[4])
employee_list = Employee.objects.filter(str_list)
else:
employee_list = Employee.objects.filter(eid=eid)
return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': eid})
elif 'dept' in request.GET and request.GET['dept']:
#建立部门查询条件,可多条件查询
dept = request.GET['dept']
if ';' in dept:
dept_list = re.split(r';', dept)
if len(dept_list) == 2:
str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1])
elif len(dept_list) == 3:
str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2])
elif len(dept_list) == 4:
str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3])
elif len(dept_list) == 5:
str_list = Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]) | Q(dept_code__contains=dept_list[2]) | Q(dept_code__contains=dept_list[3]) | Q(dept_code__contains=dept_list[4])
#employee_list = Employee.objects.filter(Q(dept_code__contains=dept_list[0]) | Q(dept_code__contains=dept_list[1]))
employee_list = Employee.objects.filter(str_list)
else:
employee_list = Employee.objects.filter(dept_code__contains=dept)
return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': dept})
elif 'function' in request.GET and request.GET['function']:
function = request.GET['function']
employee_list = Employee.objects.filter(function=function)
return render(request, 'PPDASH/search_results.html',context={'employee_list': employee_list, 'query': function})
else:
return render(request, 'PPDASH/search_form.html',context={})
def search_results2(request):
return HttpResponse("Hello, world. You're at the polls index.")
def search_results3(request):
employee_list = Employee.objects.order_by('-dept_code').all()[:10]
print(employee_list)
context = {'employee_list':employee_list}
return render(request,'PPDASH/search_results3.html',context=context)
search_form.html
<html>
<head>
<title>search_form</title>
</head>
<body>
<form action="/PPDASH/search_results/" method="get">
<a>请输入工号</a>
<input type="text" name="eid">
<a>请输入部门</a>
<input type="text" name="dept">
<a>请输入功能</a>
<input type="text" name="function">
<input type="submit" value="Search">
</form>
</body>
models.py
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
# Create your models here.
class Employee(models.Model):
eid = models.CharField(max_length=200,null=True)
name = models.CharField(max_length=200,null=True)
dept_code = models.CharField(max_length=200,null=True)
level_opt = (
(u'课级', u'课级'),
(u'部级', u'部级'),
)
level = models.CharField(max_length=200,choices=level_opt,null=True)
function_opt = (
(u'工程类', u'工程类'),
(u'生产类', u'生产类'),
(u'品质类', u'品质类'),
(u'资材类', u'资材类'),
(u'托管', u'托管'),
(u'其他', u'其他'),
)
function = models.CharField(max_length=200,choices=function_opt,null=True)
batch_opt = (
(u'WZS-P1', u'WZS-P1'),
(u'WZS-P3', u'WZS-P3'),
(u'WZS-P6', u'WZS-P6'),
(u'WZS-WT其他', u'WZS-WT其他'),
)
batch = models.CharField(max_length=200,choices=batch_opt,null=True)
mail = models.CharField(max_length=200,null=True, verbose_name=r'邮箱地址',)
score_jieshoufankui = models.IntegerField(default=0, verbose_name=r'接纳反馈', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_xueximinruidu = models.IntegerField(default=0, verbose_name=r'学习敏锐度', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_jieguodaoxiang = models.IntegerField(default=0, verbose_name=r'结果导向', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_quanjusiwei = models.IntegerField(default=0, verbose_name=r'全局思维', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_shiyingli = models.IntegerField(default=0, verbose_name=r'适应力', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_chengjiutaren = models.IntegerField(default=0, verbose_name=r'成就他人', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_lingdaoyiyuan = models.IntegerField(default=0, verbose_name=r'领导意愿', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_pinghengrenjiyurenwu = models.IntegerField(default=0, verbose_name=r'平衡人际与任务', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_fudao = models.IntegerField(default=0, verbose_name=r'辅导', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_shouquanweize = models.IntegerField(default=0, verbose_name=r'授权委责', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_jianlichenggongtuandui = models.IntegerField(default=0, verbose_name=r'建立成功团队', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_guanlirenjiguanxi = models.IntegerField(default=0, verbose_name=r'管理人际关系', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_yingxiangli = models.IntegerField(default=0, verbose_name=r'影响力', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_jianlihuobanguanxi = models.IntegerField(default=0, verbose_name=r'建立伙伴关系', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
score_jihuayuzuzhi = models.IntegerField(default=0, verbose_name=r'计划与组织', validators=[MinValueValidator(0), MaxValueValidator(100)],help_text='请输入0-100的整数')
def __str__(self):
return str(self.name)
# 定义后台上传Employee文件的接口
class Import_Employee(models.Model):
file = models.FileField(upload_to='file')
name = models.CharField(max_length=50,verbose_name=r'文件名')
class Meta:
ordering = ['name']
def __str__(self):
return str(self.name)
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('search_results/', views.search_results, name='search_results'),
path('search_results2/', views.search_results2, name='search_results2'),
path('search_results3/', views.search_results3, name='search_results3'),
]