CSV Скачать информацию о пользователе Django - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь загрузить некоторые пользовательские данные в CSV-файл. Я могу сгенерировать поля User очень хорошо, но когда я пытаюсь получить доступ к однотонному полю отношений, у меня возникают проблемы!

Попробовал множество разных способов добраться сюда. Просто не могу понять, как получить правильные связанные данные.

def export_to_csv (modeladmin, request, queryset):
    try:
        from StringIO import StringIO
    except ImportError:
        from io import StringIO
    from wsgiref.util import FileWrapper

    cols = ['username','email','first_name','last_name','my_profile.dealer_num']

    # get qs values
    data = list( queryset.values_list(*cols) )

    if not data:
        messages.error(request, 'No data to export')
        return HttpResponseRedirect( request.get_full_path() )

    # create empty csv
    csv_file = StringIO()
    csv_writer = csv.writer(csv_file, quoting = csv.QUOTE_ALL)

    # add headers
    csv_writer.writerow( cols )

    # add qs values
    for row in data:
        csv_writer.writerow( [s.encode('utf-8') for s in row] )

    csv_file.flush()
    csv_file.seek(0)

    response = HttpResponse(FileWrapper( csv_file ), content_type='text/csv')
    response['Content-Disposition'] = "attachment; filename=user-csv-export.csv"

    return response

export_to_csv.short_description = "Export to CSV"

Models.py

class MyProfile(UserenaBaseProfile):
    user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='my_profile')
    dealer_num = models.CharField(blank=True,
                                max_length=15,
                                verbose_name="Dealer Number")

Должен вернуть все, включая 5-значный номер дилера в CSV

1 Ответ

1 голос
/ 18 апреля 2019

У вас неправильный доступ к полю, вам нужно использовать __ как в запросе.

Измените cols на:

cols = ['username','email','first_name','last_name','my_profile__dealer_num']
...