首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出函数中函数的所有字段,生成xlsx

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

Stack Overflow用户
提问于 2017-12-18 19:15:40
回答 1查看 29关注 0票数 0

我在models.py类中有一些函数。当前在导出类中提到的字段都有。我想导出函数的所有字段,而不是提到每个特定的字段,这会增加我的代码行。有没有办法让我这么做?以下是export函数的代码示例

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 19:45:28

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

代码语言:javascript
复制
for q in queryset.values():
    # your code here

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

代码语言:javascript
复制
fields = ["name", "place", "date", "time", "country__name", "city")
for q in queryset.values(*fields):
    # your code here

也(无关但...)向列表中添加项目的方式非常复杂(而且效率不高)。您只需构建您的字典并将其添加到列表中:

代码语言:javascript
复制
# 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)

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

代码语言:javascript
复制
 list_dict = [
    dict(name=q.name, place=q.place, time=q.time, #etc)
    for q in qs
    ]

但是由于queryset.values()已经生成了字典,所以您真正需要的实际上是:

代码语言:javascript
复制
fields = ["name", "place", "date", "time", "country", "city")
list_dict = list(queryset.values(*fields))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47867345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档