Django: загрузка отфильтрованных данных в формате csv
Hej!
У меня есть данные из модели в таблице (созданной в шаблоне) и я хочу загрузить их в формате csv. Моя проблема в том, что я не могу применить свои фильтры в загруженном csv, он всегда выдает мне весь список.
И я не могу получить имя родительского_института, только '1', если оно есть.
Кто-нибудь знает, как этого добиться? Или знает, что я делаю не так?
Любая помощь будет принята с благодарностью! :)
# views.py
def download_csv(request):
institutions = Institution.objects.all()
filter = InstitutionFilter(request.GET, queryset=institutions).qs
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="institutions.csv"'
writer = csv.writer(response)
writer.writerow(['Name', "Abbreviation", "Parent Institution", "Phone Number"])
for institution in filter.values_list('name', 'abbreviation', 'parent_institution', 'contact_details'):
writer.writerow(institution)
return response
# filters.py
class InstitutionFilter(django_filters.FilterSet):
name = CharFilter(field_name="name", lookup_expr="icontains")
class Meta:
model = Institution
fields = "__all__"
<!-- template.html -->
<br>
<div class="row collapse {% if show_form %} show {% endif %}" id="form-holder">
<div class="row">
<div class="col">
<div class="card card-body">
<form method="get">
{{myFilter.form.as_p}}
<button class="btn-primary" type="submit">Search</button>
</form>
</div>
</div>
</div>
</div>
</br>
<div class="row">
<div class="col-md">
<div class="card card-body">
<table class="table table-sm">
<tr>
<th>Name</th>
<th>Abbreviation</th>
<th>Parent Institution</th>
</tr>
{% for institution in institutions %}
<tr>
<td>{{institution.name}}</td>
<td>{{institution.abbreviation}}</td>
<td>{{institution.parent_institution.name}}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
Мне пришлось добавить параметр filter в url, чтобы заставить их работать. Так что решение лежит в шаблоне, а не в представлениях :)
<div class="col">
<a href="{% url 'csv_download:download_institutions' %}?{{ request.GET.urlencode }}">Download CSV</a>
</div>