Мне нужны множественные поля из обеих моделей в экспорте m2m .csv
У меня есть рабочее решение для экспорта файла .csv из объединения двух моделей с помощью отношения manytomany, и моя проблема заключается в том, что я не знаю, как выразить в коде, как ввести несколько полей из модели, которая объединяется. Я могу добавить несколько столбцов из модели, в которой определено поле m2m, но я могу добавить только один столбец из модели, на которую ссылаются. Как мне ввести несколько столбцов из обеих моделей?
models.py
class dbmobile(models.Model):
Site_Code = models.CharField('Site Code', max_length=20, blank=True, null=True, choices=SITE)
Account_Number = models.CharField('Account Number', max_length=20, blank=True, null=True,)
Mobile_Number = models.CharField('Mobile_Number', max_length=20, blank=True, null=True,)
User_Name = CharField('User Name', max_length=120, blank=True, null=True,)
User_id = models.CharField('User Id', max_length=20, blank=True, null=True,)
class expense(models.Model):
ExcludeTax = models.DecimalField('Exclude Tax', max_length=20, blank=True, null=True, max_digits=10, decimal_places=2)
IncludeTax = models.DecimalField('Include Tax', max_length=20, blank=True, null=True, max_digits=10, decimal_places=2)
user = models.ManyToManyField(dbmobile, blank=True)
Date = models.DateField(default=now)
views.py
def export_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="file.csv"'
employees = expense.objects.all()
writer = csv.writer(response)
writer.writerow (['Date', 'Tax Included', 'User'])
for e in employees:
writer.writerow([e.Date, e.IncludeTax, ', '.join([e.User_Name for e in e.user.all()]),])
return response
Я изменил свой код, чтобы включить набор запросов из родительского определения и заменил join двойным подчеркиванием полей из родительской базы данных, и теперь он работает.
views.py
def expense_table(request):
item = expense.objects.all().order_by('IncludeTax')
search_list = expense.objects.all().order_by('user__Site_Code', 'Date')
search_filter = expenseFilter(request.GET, queryset=search_list)
add = search_filter.qs.aggregate(Sum('IncludeTax'))['IncludeTax__sum']
return render(request, 'expense/MExpense.html', {'item': item, 'filter': search_filter, 'add': add})
def export_csv(request):
employees = expense.objects.all()
search = expenseFilter(request.GET, queryset=employees).qs
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="file.csv"'
writer = csv.writer(response)
writer.writerow (['Date', 'Include Tax', 'User'])
for e in search.values_list('Date', 'IncludeTax', 'user__Site_Code', 'user__User_id'):
writer.writerow(e)
return response