#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>
``