导出导出函数中的所有函数字段以生成xlsx

问题描述 投票:0回答:1

我在models.py类中有一些函数。目前,出口类中提到了所有字段。我想导出所有函数字段,而不是提到增加我的代码行的每个特定字段。有没有办法可以做到?下面是导出功能的代码示例

def export_xlsx(self, request, queryset):
list_dict = []
idx = 0
for q in queryset:

    list_dict += [{}]
    list_dict[idx]['name'] = q.name
    list_dict[idx]['place'] = q.place
    list_dict[idx]['time'] = q.time
    list_dict[idx]['date'] = q.date
    list_dict[idx]['country'] = q.country
    list_dict[idx]['city'] = q.city

    idx += 1
h = [
    'name',
    'place',
    'time',
    'date',
    'country',
    'city']
gen_xlsx("export_file", h, list_dict, request)
return request
python django
1个回答
0
投票

Django的查询集有一个value()方法,它产生{fieldname:fieldvalue} dicts而不是模型实例,所以假设你不希望检索相关的模型值,这应该可以解决你的问题:

for q in queryset.values():
    # your code here

如果你需要来自相关对象的值,那么你必须将所有想要的字段名称传递给values,使用"relatedfield__fieldname"语法(与相关查找相同)用于相关对象字段 - 即,如果country实际上是Country模型的foreign_key使用name字段并且您希望结果中包含国家/地区名称,您需要:

fields = ["name", "place", "date", "time", "country__name", "city")
for q in queryset.values(*fields):
    # your code here

另外(不相关但......)你将项目添加到列表的方式是无用的复杂(并没有真正有效)。您可以构建您的dict并将其附加到列表中:

# awful name FWIW... what about 'records' or 'rows' or,
# well, something meaningful ?
list_dict = []

for q in queryset:
    d = dict(name=q.name, place=q.place, time=q.time, #etc)
    list_dict.append(d)

可以进一步改进为列表表达式:

 list_dict = [
    dict(name=q.name, place=q.place, time=q.time, #etc)
    for q in qs
    ]

但由于queryset.values()已经产生了dicts,你真正需要的只是:

fields = ["name", "place", "date", "time", "country", "city")
list_dict = list(queryset.values(*fields))
© www.soinside.com 2019 - 2024. All rights reserved.