我在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
答案 0 :(得分:0)
Django的查询集有一个value()
方法,它产生{fieldname:fieldvalue}
个dicts而不是模型实例,所以假设你不希望检索相关的模型值,这应该可以解决你的问题:
for q in queryset.values():
# your code here
如果您需要来自相关对象的值,那么您必须使用values
语法(相同的查找用于相关对象字段)将所有需要的字段名称传递给"relatedfield__fieldname"
- 即如果country
实际上是带有Country
字段的name
模型的foreign_key,并且您希望结果中包含国家/地区名称,则需要:
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))