我在models.py类中有一些函数。当前在导出类中提到的字段都有。我想导出函数的所有字段,而不是提到每个特定的字段,这会增加我的代码行。有没有办法让我这么做?以下是export函数的代码示例
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发布于 2017-12-18 19:45:28
Django的querysets有一个value()方法,它生成{fieldname:fieldvalue}字典而不是模型实例,所以假设您不希望检索相关的模型值,这应该可以解决您的问题:
for q in queryset.values():
# your code here如果您需要来自相关对象的值,则必须将所有需要的字段名称传递给values,对相关对象字段使用"relatedfield__fieldname"语法(用于相关查找)-例如,如果country实际上是包含name字段的Country模型的foreign_key,并且您希望在结果中包含国家名称,则需要:
fields = ["name", "place", "date", "time", "country__name", "city")
for q in queryset.values(*fields):
# your code here也(无关但...)向列表中添加项目的方式非常复杂(而且效率不高)。您只需构建您的字典并将其添加到列表中:
# 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()已经生成了字典,所以您真正需要的实际上是:
fields = ["name", "place", "date", "time", "country", "city")
list_dict = list(queryset.values(*fields))https://stackoverflow.com/questions/47867345
复制相似问题