如何解决Django-如何在模板复选框中获取选中的对象?
我是Django的新手, 我正在使用xhtml2pdf将数据对象从模板呈现为PDF文件,并且我想允许用户仅通过复选框将选中的对象呈现为pdf,是否可以在Django中进行过滤?
谢谢
views.py:
def render_to_pdf(template_src,context_dict={}):
template = get_template(template_src)
html = template.render(context_dict)
result = BytesIO()
pdf = pisa.pisaDocument(BytesIO(html.encode('ISO-8859-1')),result,link_callback=link_callback)
if pdf.err:
return HttpResponse('Error')
return HttpResponse(result.getvalue(),content_type='application/pdf')
class ViewPDF(View):
@method_decorator(login_required(login_url='livraison:login_page'))
def get(self,request,*args,**kwargs):
checked_objects = [i dont know how to get them]
queryset = Livraison.objects.filter(id__in=[checked_objects]) # i want something does that
data = {
'livraisons' : queryset,'now' : f'Livraisons-{date.today()}'
}
pdf = render_to_pdf('pdf_template.html',data)
return HttpResponse(pdf,content_type='application/pdf')
解决方法
使用表格获取用户数据。
class LivraisonSelectForm(forms.Form):
livraison = forms.ModelChoiceField(label='select',queryset=Livraison.objects.all(),widget=forms.CheckboxInput())
然后在您的视图中使用它:
class ViewPDF(FormView):
form_class = LivraisonSelectForm
template_name = 'path_to_template_with_html_to_filter_data'
@method_decorator(login_required(login_url='livraison:login_page'))
def form_valid(self,form):
checked_objects = form.cleaned_data.get('livraison',[])
queryset = Livraison.objects.filter(id__in=checked_objects) # i want something does that
data = {
'livraisons' : queryset,'now' : f'Livraisons-{date.today()}'
}
pdf = render_to_pdf('pdf_template.html',data)
return HttpResponse(pdf,content_type='application/pdf')
不要忘记在您的html {{ form }}
**
更新
**
我找到了解决方案,我使用Ajax代码收集了每个选定的对象
// check selected objects (#pdf is the id of the button which gonna generate the pdf file)
$('#pdf').click(function () {
var id = [];
$(':checkbox:checked').each(function (i) {
id[i] = $(this).val()
})
if (id.length === 0) {
alert('Please Select something..');
} else {
$.ajax({
url: '.',method: 'GET',data: {
id,},success: function (response) {
console.log('PDF is ready')
}
})
}
});
然后将变量添加到视图函数中,以收集选定的对象并过滤查询集
myFunction.selected_ones = request.GET.getlist('id[]')
然后在generate_pdf_func中过滤查询集
queryset = MODEL.objects.filter(id__in=[x for x in myFunction.selected_ones if x != '0'])
注意:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。