Django экспорт в csv с выводом только одной строки данных
У меня есть 4 строки данных в простой базе данных, и я хотел бы вывести их в .csv. Я настроил Django csv и все вроде бы работает нормально, но я получаю только первую строку. Может ли кто-нибудь сказать мне, что не так с кодом, который я использовал, поскольку мне явно нужны все 4 строки.
models.py
class account(models.Model):
Price = models.DecimalField('price', max_length=20, blank=True, null=True, max_digits=10, decimal_places=2)
User = models.CharField('user', max_length=120, blank=True, null=True,)
Account_Number = models.CharField('account Number', max_length=20, blank=True, null=True,)
Date = models.DateField(default=now)
def __str__(self):
return str(self.User)
views.py
def stage(request):
slist = account.objects.all()
return render(request, 'stage.html', {'slist': slist})
def export_csv(request):
response=HttpResponse(content_type='text/csv')
writer = csv.writer(response)
writer.writerow(['User', 'Account Number', 'Price', 'Date'])
for file in account.objects.all().values_list('User', 'Account_Number', 'Price', 'Date'):
writer.writerow(file)
response['Content-Disposition'] = 'attachment; filename="Expenses.csv"'
return response
urls.py
urlpatterns = [
path('', views.home, name="home"),
path('stage/', views.stage, name='stage'),
path('export_csv', views.export_csv, name='exportcsv')
]
html
<table id="dataTable" class="table">
<thead>
<tr>
<th>User</th>
<th>Account Number</th>
<th>Price</th>
<th>Date</th>
</tr>
</thead>
<tbody>
{% for item in slist%}
<tr>
<td>{{item.User}}</td>
<td>{{item.Price}}</td>
<td>{{item.Account_Number}}</td>
<td>{{item.Date}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div><a href="{% url 'exportcsv' %}">
<button type="button" class="button">Export to CSV</button></a></div>
Я изменил код для функции экспорта, и теперь он, кажется, работает.
views.py
def export_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="file.csv"'
employees = account.objects.all()
writer = csv.writer(response)
writer.writerow (['User', 'Price', 'Acoout Number'])
for employee in employees:
writer.writerow([employee.User,employee.Price,employee.Account_Number])
return response