如何在同一FBV(基于函数的视图)中处理获取请求

2024-09-28 16:59:08 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我是Django的初学者,我创建了一个网页,用户可以在其中搜索/过滤结果,为此,我使用了Django过滤器概念。 现在我的要求是用户应该能够下载过滤后的数据。为了实现这一点,我创建了一个具有下载名称的独立视图类,并尝试通过相同的过滤器类Queryset,但运气不好,它给了我所有的模型数据(记录)

请找到帖子:how to use Django filtered class data to 2 seperate view

在这之后,我通过将下载视图保持在相同的渲染视图中进行了检查,发现它正在工作。(这里的问题是两个get请求同时只有一个在工作。)

我的要求是在执行搜索之后,如果用户单击下载,则应执行第二个下载逻辑

##################################

def retrievecta_view(request):
    if request.method == 'GET':
        allcta = CTA.objects.all()
        allcta1 = allcta
        allctagen = allcta1.filter(Shift_timing__exact='General')
        allctamor = allcta1.filter(Shift_timing__exact='Morning')
        allctseve = allcta1.filter(Shift_timing__exact='Evening')
        allctatotal = allcta1.filter(Shift_timing__exact='Total')

        # For filtering using   'django_filters',
        cta_list = CTA.objects.all()
        cta_filter = CTAFilter(request.GET, queryset=cta_list)
        allcta = cta_filter.qs

        paginator = Paginator(allcta, 50)
        page_number = request.GET.get('page')
        try:
            allcts = paginator.page(page_number)
        except PageNotAnInteger:
            allcts = paginator.page(1)
        except EmptyPage:
            allcts = paginator.page(paginator.num_pages)
        return render(request, 'abcd/cta.html', {'allcta': allcta, 'cta_filter': cta_filter, 'allcta1': allcta1,
                                                  'allctagen': allctagen, 'allctamor': allctamor,
                                                  'allctaeve': allctaeve,
                                                  'allctatotal': allctatotal})


        if request.method == 'GET':
            response = HttpResponse(content_type='application/ms-excel')
            response['Content-Disposition'] = 'attachment; filename="CTA_ShiftTiming.xls"'
            wb = xlwt.Workbook(encoding='utf-8')
            ws = wb.add_sheet('CTA_ShiftChange Data')  # this will make a sheet named Users Data
            # Sheet header, first row
            row_num = 0
            font_style = xlwt.XFStyle()
            font_style.font.bold = True
            columns = ['id', 'IDk', 'Shift_timing', 'EmailID', 'Vendor_Company', 'Project_name',
                       'SerialNumber',
                       'Reason', 'last_updated_time']
            for col_num in range(len(columns)):
                ws.write(row_num, col_num, columns[col_num], font_style)  # at 0 row 0 column
            # Sheet body, remaining rows
            font_style = xlwt.XFStyle()
            cta_list = CTA.objects.all()
            cta_filter = CTAFilter(request.GET, queryset=cta_list)
            allcta = cta_filter.qs
            print('All cta check in export:', allcta)
            rows = allcta.values_list('id', 'IDK', 'Shift_timing', 'EmailID', 'Vendor_Company',
                                      'Project_name', 'SerialNumber', 'Reason', 'last_updated_time')

            for row in rows:
                row_num += 1
                for col_num in range(len(row)):
                    ws.write(row_num, col_num, row[col_num], font_style)
            wb.save(response)
            return response

有谁能帮我写这两个逻辑错误的方式,这样做后,我会点击下载然后第二种方法应该非常。任何帮助或建议,这将是高度赞赏


Tags: getshiftrequestpagecolfilternumlist