Используемые фильтры Django и экспорт данных с помощью CSV

#django #csv #django-views #export-to-csv #django-filter

Вопрос:

Я создал форму поиска фильтра, чтобы отфильтровать некоторые элементы на основе названия и категории. Это работает, но я хочу экспортировать элементы с помощью CSV, но это не удается.

Он продолжает показывать мне эту страницу [![ошибка страницы django][1]][1] [1]: https://i.stack.imgur.com/H8BYK.png

и подумайте, что это ошибка, но, пожалуйста, прокрутите вниз, чтобы увидеть представления, URL-адреса, модели и шаблон

 context 
{'filter_form': <inventory_app.filter.ProductFilter object at 0x00000268BD07A940>,
 'products': <QuerySet [<Product: HP laptop-10>, <Product: HP computer-40>]>}
filter_form 
<inventory_app.filter.ProductFilter object at 0x00000268BD07A940>
products    
<QuerySet [<Product: HP laptop-10>, <Product: HP computer-40>]>
request 
<WSGIRequest: GET '/'>
 

Эти Взгляды

 def item_list(request):
    products = Product.objects.all()
    filter_form = ProductFilter(request.GET, queryset= products)
    products = filter_form.qs
    context = { "filter_form": filter_form,
                "products": products, }

*This is the CSV export function where it fails*

    if filter_form['export_to_CSV'].value() == True:
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="my_inventory.csv"'
        writer = csv.writer(response)
        writer.writerow(['CATEGORY', 'ITEM NAME', 'QUANTITY'])
        instance = products
        for product in instance:
            Writer.writerow([product.category, product.item_name, product.quantity])
        return response
   return render(request, 'item_list.html', context)
 

Форма поиска фильтра

 import django_filters
from .models import Product
from django import forms

class ProductFilter(django_filters.FilterSet): 
   export_to_csv = django_filters.filters.BooleanFilter(widget=forms.CheckboxInput) 
   class Meta:
      model = Product
      fields = ['item_name', 'category', 'export_to_csv']
 

URL-адреса

 path('', item_list, name='item_list'),
 

Шаблон

        <form method='get' action=''>{% csrf_token %}
            {{ filter_form.form|crispy }}
            <button class="btn btn-primary" type="submit">search</button>
        </form>
``