2

私はDjangoを使い始めています.本を読んでグーグルで検索しましたが、これを解決するためのいくつかの概念を関連付けていないのではないかと心配しています.

特定の企業に対応するいくつかの値を表示する必要があります。ユーザーが最初に比較する 3 つの企業を選択すると、それらの企業のデータが応答に表示されます。

私の見解では、次のようにデータを表示するためにテンプレートで反復するクエリセットを作成します。

ビューの抜粋:

        C1 = form.cleaned_data['Company1']
        C2 = form.cleaned_data['Company2']
        C3 = form.cleaned_data['Company3']

        company_names = [C1,C2,C3]

        company1 = (Company_stats.objects.filter(period__exact=P, company_name__exact=C1))
        company2 = (Company_stats.objects.filter(period__exact=P, company_name__exact=C2))
        company3 = (Company_stats.objects.filter(period__exact=P, company_name__exact=C3))

        company_list = [company1,company2,company3]

テンプレートの抜粋:

  {%for c in company_list%}    
     {%for z in c %}
        {{ z.company_name }}
        {{ z.nxt_m_ret_est }}    
        {{ z.nxt_m_ret_rat }}
     {% endfor %}  
  {% endfor %}

これは機能します-しかし、私はもっと多くの可動部分があるので(質問のためにビューを単純化しました)、クエリセットの無限の洗濯物リストに変わります-これはDRYではないことを100%確信しています(洗濯物にもかかわらず)参照 ;) コンテキストの長さは言うまでもありません。

誰かがこれを適切な方法で行うことを学ぶのを手伝ってくれたら本当にありがたいです. 事前にどうもありがとうございました!

4

2 に答える 2

1

これを試して:

companies = ['Company1', 'Company2', 'Company3']

company_names = [form.cleaned_data[c] for c in companies]

company_list = Company_stats.objects.filter(
    period__exact=P, 
    company_name__in=company_names
)

これがあなたのニーズに正確に合わない場合でも、同様のものが機能するはずです。

于 2012-12-04T18:00:27.830 に答える
0

また、マネージャーが真価を発揮するのは定型的なクエリであることも付け加えておきます。コードの他の場所でも同じクエリを作成する必要がある場合は、それらの使用を検討してください。複雑だと思ったので、しばらく避けましたが、実際にはそれほど悪くはなく、コードをかなりきれいにすることができます。

于 2012-12-04T18:58:28.840 に答える