2017-12-18 9 views
0

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 

答えて

0

Djangoのクエリセットので、あなたは関連するモデルの値を取得するために期待していないと仮定すると、代わりにモデルインスタンスの{fieldname:fieldvalue} dictsを得value()方法は、これはあなたの問題を解決する必要があります:

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

あなたは関連オブジェクトから値を必要とするならば、あなたは関連オブジェクトフィールドに"relatedfield__fieldname"構文(関連検索に使用したのと同じ)を使用して、valuesに必要なすべてのフィールド名を渡す必要があります - すなわち場合実際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()以来、すでにdictsをもたらし、あなたが本当に必要なのは、実際にあります:

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

@Ressaqこれは別の質問です。回答には十分な文脈がありません。あなたが必要とするかもしれない "バリデーション"の例とともに、新しい質問として投稿してください。また、一般的な回答(任意のモデルで動作するコード)または特定の回答(この場合はモデルのコードやクエリなどを投稿する)を探しているかどうかを説明してください。 –

関連する問題