最重要的是,html代码中有一个表单询问将从数据库中获取什么时期的记录。 当您单击“生成”按钮时,应该会生成一个 docx 文档。但是由于某种原因没有生成,选择成功,没有报错。 html
<form action="" method="get" class="my-4 ">
<input type="date" name="date_from" value="{{ date_from }}" id="date_from">
<input type="date" name="date_until" value="{{ date_until }}" id="date_until">
<input type="submit" value="Generate" class="btn btn-primary">
</form>
意见
class DirectorOrdersReportView(TemplateView):
template_name = 'director/orders_report_director.html'
model = OrderStorage
def get(self, request, *args, **kwargs):
date_from = request.GET.get('date_from')
date_until = request.GET.get('date_until')
records = OrderStorage.objects.filter(created_at__range=[date_from, date_until])
return super().get(request, *args, **kwargs, records=records)
def gen_report_(self):
current_datetime = datetime.now()
str_current_datetime = str(current_datetime)
document = Document()
docx_title = "report" + str_current_datetime + ".docx"
document.add_paragraph()
document.add_paragraph("%s" % date.today().strftime('%B %d, %Y'))
document.add_paragraph('Orders report')
qs2 = self.get().records()
qs2count = qs2.count() + 1
table = document.add_table(rows=qs2count, cols=8)
table.style = 'Table Grid'
table.cell(0, 0).text = 'ID'
table.cell(0, 1).text = 'User'
table.cell(0, 2).text = 'Size'
table.cell(0, 3).text = 'Status'
for order in self.kwargs:
qs2 = self.get().records()
row = qs2.count()
table.cell(row, 0).text = str(order.pk)
table.cell(row, 1).text = str(order.user)
table.cell(row, 2).text = str(order.size)
table.cell(row, 3).text = str(order.status)
document.add_page_break()
f = BytesIO()
document.save(f)
length = f.tell()
f.seek(0)
response = HttpResponse(
f.getvalue(),
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'
)
response['Content-Disposition'] = 'attachment; filename=' + docx_title
response['Content-Length'] = length
return response
收集了该期间的数据,但由于某种原因根本没有创建报告文件... 在我看来,我错误地引用了“记录”对象,但我不明白如何正确地做到这一点。
模型.py
class OrderStorage(models.Model):
user = models.ForeignKey(to=User, verbose_name='User', on_delete=models.CASCADE)
size = models.ForeignKey(verbose_name='Size', to=TireSize, on_delete=models.CASCADE)
status = models.IntegerField(verbose_name='Status', choices=OrderStatus.choices, default=0)
created_at = models.DateTimeField(verbose_name='Create at', auto_now_add=True)
updated_at = models.DateTimeField(verbose_name='Update at', auto_now=True)
点击“生成”后。正在填写 docx 文件