今天的Django教训汇总:通过 Q 对象完成复杂查询,利用分号多条件查询-20211020

通过 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'),
]



在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值