首页 > 解决方案 > Django WeasyPrint - 导出过滤列表

问题描述

因此,我从名为“OrderListView”的 ListView 创建了一个 pdf 文件。现在我想将查询集传递给 pdf 文件。

为了更清晰,我将我的列表视图重写为函数视图。我需要找到一种方法将查询集传递给 pdf 视图。我正在使用 django-filter 来创建过滤视图。我有以下内容;

过滤器.py

class OrderFilter(django_filters.FilterSet):

class Meta:
    model = Order
    fields = {
        'start_date': ['gte'],
        'end_date': ['lte'],
    }

视图.py

from .filters import *

# View to show a filtered list using django-filter
def order_list(request):
    order_list = Order.objects.all()
    order_filter = OrderFilter(request.GET, queryset=order_list)

    start_date__gte = request.GET.get('start_date__gte','')
    start_date__lte = request.GET.get('start_date__lte','')

    return render(request, 'orders/order_list.html', {
        'filter': order_filter,
        'start_date__gte': start_date__gte,
        'start_date__lte': start_date__lte,
    })

# View to create a pdf file from the filtered view using WeasyPrint
def order_list_pdf(request):
    # Edited: Create queryset 
    start_date__gte = request.GET.get('start_date__gte','')
    start_date__lte = request.GET.get('start_date__lte','')

    order_list = Order.objects.filter(
        Q(start_date__gte=start_date__gte) |
        Q(start_date__lte=start_date__lte)
    )
    order_filter = OrderFilter(request.GET, queryset=order_list)

    response = HttpResponse(content_type="application/pdf")
    response['Content-Inline'] = 'attachment; filename=filtered_list.pdf'.format()

    html = render_to_string('pdf/pdf_booking_list_arrivals.html', {
        'filtered_list': order_list,
    })

    font_config = FontConfiguration()
    HTML(string=html).write_pdf(response, font_config=font_config)

    return response

所以我尝试使用

start_date__gte = request.GET.get('start_date__gte','')
start_date__lte = request.GET.get('start_date__lte','')

并使用 url 传递查询

#edited
<a class="btn" href="{% url 'order_list_pdf' %}?start_date__gte={{ start_date__gte }}&start_date__lte={{ start_date__lte }}">Create PDF</a>

这确实会在 url 中创建查询,但不会过滤列表。生成的 pdf 正在工作,我只需要找到一种方法,只将过滤后的结果发送到 pdf 视图。

任何帮助,将不胜感激!

标签: djangopdfdjango-filterweasyprint

解决方案


推荐阅读