我正在使用Django filter,并在普通视图中使用它,它正在按预期工作,现在我想下载过滤后的数据,因此为此,我正在编写一个下载视图,其中我尝试使用相同的FilterClass,但没有运气。它给了我一个错误(异常值:
类型对象“CTSFilter”没有属性“values\u list”)。
任何人都可以帮助/建议如何在filter类中使用filtered queryset多个视图,或者将filtered query的数据传递给下载视图
请找到我的密码
过滤器.py
class CTAFilter(django_filters.FilterSet):
id = django_filters.NumberFilter(label="DSID")
class Meta:
model = CTA
fields = ['id', 'EmailID','id','Shift_timing']
在这里,我想当用户将选择Shift\u timing时,例如早晨,他将获得10条记录,因此我希望将相同的数据传递到下面的下载视图。(为此,我使用了CTSFilter类,但运气不佳。)
请查找以下下载代码(查看)
def exportcts_data(request):
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('CTS_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()
# cts_list = CTA.objects.all()
# cts_filter = CTAFilter(request.GET, queryset=cts_list)
# allcts = cts_filter.qs
rows = CTAFilter.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
注意:如果我是硬编码,它就是工作的例子
rows = `TCA.objects.filter(Shift_timing__exact='Morning').values_list('id','idk','Shift_timing','EmailID','Vendor_Company','Project_name','SerialNumber','Reason','last_updated_time')`
所以上面的代码给了我所有的结果,其中轮班时间是早上,但我想动态地绕过过滤的类数据。 这方面的任何帮助都是非常值得赞赏的
+添加我的视图(显示页面内容的渲染)
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})
注意:如果我将保留相同的URL(retrievecta_视图),则下载视图可以正常工作,但单独来看它不工作
@register.simple_tag
def relative_url(value, field_name, urlencode=None):
url = '?{}={}'.format(field_name, value)
if urlencode:
querystring = urlencode.split('&')
filtered_querystring = filter(lambda p: p.split('=')[0] != field_name, querystring)
encoded_querystring = '&'.join(filtered_querystring)
url = '{}&{}'.format(url, encoded_querystring)
return URL
我用于分页和返回筛选器查询字符串的代码
{% load apple_extras%}
{% if page.has_other_pages %}
<ul class="pagination">
{% if page.has_previous %}
<li class="disabled"><a href="?page={{ page.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in page.paginator.page_range %}
{% if page.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li>
<a href="{% relative_url i 'page' request.GET.urlencode %}">{{ i }}</a>
</li>
{% endif %}
{% endfor %}
{% if page.has_next %}
<li class="disabled"><a href="?page={{ page.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
目前没有回答
相关问题 更多 >
编程相关推荐