Мне нужны множественные поля из обеих моделей в экспорте 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
Вернуться на верх