CSV下载用户信息Django

时间:2019-04-18 18:07:04

标签: python django django-models

我正在尝试将一些用户数据下载到csv文件中。我能够很好地生成User字段,但是当我尝试访问onetoone关系字段时,我遇到了问题!

尝试了多种不同的方式到达这里。只是似乎无法弄清楚如何获取正确的相关数据。

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")

应在csv中返回所有内容,包括5位经销商编号

1 个答案:

答案 0 :(得分:1)

您没有正确访问该字段,需要在查询中使用__

将列更改为:

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