Django 다중 검색 & 필요한 열만 찾기 (필요한 열을 얻는query set) & 다운로드

2038 단어 Django
def get_query_all(dic=None,values=None):
    res = oneModel.objects.filter(**dic).values(*values)
    return res
  • 다중 검색: 검색 항목을 Filter에 사전 형식으로 전송하고 패키지 해제 주의**
  • 필요한 열 얻기: 필요한 열을 목록 형식으로values에 전송하여 사전 목록 [obj1,obj2,obj3]
  • 얻기
    다운로드 기능 구현:
    obj = get_query_all(dic, header)
    buf = BytesIO()     # from io import BytesIO
    import openpyxl
    appeal_wb = openpyxl.Workbook(encoding='utf-8',write_only=True)
    ws = appeal_wb.create_sheet()
    ws.append(list(header_dic.values()))
    for row in obj:
        ws.append(list(row.values()))
    appeal_wb.save(buf)
    file = buf.getvalue()
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment;filename=' + 'RebatePool' + '.xls'
    response.write(file)
    return response
    

    Q를 사용하여 잡다한 조건 검색
    con = Q()
    q1 = Q()
    q1.connector = 'OR'
    q1.children.append(('id', 1))  #       
    q1.children.append(('id', 2))
    q1.children.append(('id', 3))
    q2 = Q()
    q2.connector = 'OR'
    q2.children.append(('name', 'xiaoming'))
    con.add(q1, 'AND')
    con.add(q2, 'AND')
    models.Tb1.objects.filter(con).orderby('id')
    
    def get_query_all(dic=None, values=None, limit=None):
        '''dic:    ,   (year=2017,year=2018) OR,      AND  (year month)
        values      (           )
        limit:(skip,skip+limit)'''
        con = Q()
        if dic:
            for k,v in dic.items():
                q1 = Q()
                q1.connector = 'OR'
                if v:
                    for item in v:
                        q1.children.append(item)
                con.add(q1, 'AND')
        if limit:
            res = RebatePoolModel.objects.filter(~Q() & con).order_by('-extra__    ')[limit[0]:limit[1]].values(*values)
        else:
            res = RebatePoolModel.objects.filter(~Q() & con).order_by('-extra__    ').values(*values)
        return res
    

    좋은 웹페이지 즐겨찾기