2017-02-07 2 views
1

私は10フィールド/カラムのレポートテーブルを持っています。私は、ユーザがレポート内でどの列を動的に選択できるようにしたいのですか?これはDjangoのORMで行うことができます動的にdjango ormカラムを選択

ユーザーはcolumn1のとcolumn2のを望んでいる場合、それはユーザーがCOLUMN5、column6、column9、column10を望んでいるなら、それはようにする必要があり、この

obj = ReportTable.objects.values('column1', 'column2') 

ようにする必要がありますこの

obj = ReportTable.objects.values('column5', 'column6', 'column9', 'column10') 

は、DjangoのORMで、このなんとかですか私は、カーソルまたは生のクエリを使用する必要があります

+0

上記のあなたの方法は、ただ何とかユーザから列のリストを取得し、正常に動作する必要があります。また、ReportTable.objects.all()を使用し、getattrを使用して必要な値を取得することもできます。 – Johan

答えて

0

onlyvaluesのオプションがあります。あなたの例では正常に動作します。また

ReportTable.objects.values('column5', 'column6', 'column9', 'column10') 

:あなたはSELECT column5, column6, column9, column10 FROMと同等の何かを探しているなら、私はobjects.onlyを使用することをお勧め

ReportTable.objects.only('column5', 'column6', 'column9', 'column10') 

+0

クイックアンサーに感謝します。ことは、列の選択は動的です。だから彼は任意の組み合わせを選ぶかもしれません。投稿した回答が表示された場合、ユーザーの入力から形成された値のリストが取り込まれます。 –

+0

@PrabhakarShanmugamそれは文字列を受け取るので、ユーザーの選択を前後に渡す方法はたくさんあります。あなたの好みの方法が見つかったらうれしいです。 –

0

私はこの質問に対する解決策を見つけました。 Django ormの値には位置的な引数があります。

args = ['column5', 'column6', 'column9', 'column10'] 
obj = ReportTable.objects.values(*tuple(args)) 

argsは、通常のgetメソッドまたはpostメソッドを使用してユーザーから取得できます。

0

変数をハードコードされた文字列の代わりにクエリセットに渡すことができます。ユーザの選択肢のために、フォームはユーザによって埋められることができる。

choices = request.POST.getlist('choices') 
obj = ReportTable.objects.values(*choices) 

objがあなたの期待出力

となり、テンプレート内の複数の入力フィールドが同じ名前で使用することができます。

<input name="choices"> 
 
<input name="choices"> 
 
<input name="choices">

関連する問題