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

2024-04-23 18:42:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

Tags: 函数代码namecitydatetimerequestplace
1条回答
网友
1楼 · 发布于 2024-04-23 18:42:50

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

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

如果需要相关对象的值,则必须使用相关对象字段的"relatedfield__fieldname"语法(用于相关查找的语法相同)将所有所需字段名传递给values,即如果country实际上是带有name字段的Country模型的外键,并且希望在结果中包含国家名称,则需要:

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()已经产生了dict,所以您真正需要的实际上是:

fields = ["name", "place", "date", "time", "country", "city")
list_dict = list(queryset.values(*fields))

相关问题 更多 >