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

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

问题描述:

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

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 

Django的查询集有一个value()方法产生{fieldname:fieldvalue}类型的字典,而不是模型实例,所以假设你不要指望,以获取相关的模型值,这应该解决您的问题:

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

,如果你需要从相关对象的值,那么你就必须将所有所需的字段名传递给values,使用"relatedfield__fieldname"语法(用于与查找相同)相关对象的字段 - 也就是说,如果country实际上是一个foreign_key到Country模型与name领域,你想在你的结果国名,你将需要:

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)) 
+0

@Ressaq这是另一个问题,并没有足够的上下文来回答它。请将它作为新问题发布,并附带您可能需要的“验证”示例。另外,解释一下你是否在寻找一个通用的答案(只适用于任何模型的代码)或特定的答案(在这种情况下,发布模型代码,查询等)。 –