0

まず第一に、あなたの時間と助けに感謝します:)

私は以下のモデルを作成し、しばらくの間、シナリオ 1 (シナリオも以下) で楽しくコーディングしてきました。

今、私はチャートを使い始め、シナリオ 2 の形式でデータにアクセスする必要があります。シナリオ 2 は機能します。結果を待っている間にサンドイッチを作る時間があるという付加価値があります。これは、データベースに 4 回アクセスしていることが原因であることはわかっているので、おそらくコードの歴史の中で最も効率の悪いコードを作成しましたが、それ以外の方法で機能させることはできませんでした。

Django が支持するすべての原則に反することなく、望ましい結果を達成する方法を理解していただければ幸いです。

ありがとうございました!

Model:

    class People_stats(models.Model):
    people_stats = models.CharField(max_length=50, primary_key=True)        
    con_basmat = models.IntegerField(null=True, max_length=6) 
    con_cgoods = models.IntegerField(null=True, max_length=6) 
    con_cserv = models.IntegerField(null=True, max_length=6)                 


   SCENARIO 1 - when iterating in template 

     Views:

        people = ['Name', 'Benchmark1', 'Benchmark2', 'Benchmark3']
        people_names = [form.cleaned_data[p] for p in people]            

        profiles =  [People_stats.objects.filter(name__in=people_names)] 

     Template: 

        {% for p in profiles %}
          {%for d in p %}              
            <ul>
              <li>{{d.con_basmat}}</li>
              <li>{{d.con_cgoods}}</li>
              <li>{{d.con_cserv}}</li>                        
            </ul> 
          {%endfor%} 
        {% endfor %}       


    #Scenario 2 - when I need to access model fields and create a json.dump  

      Views:

        N = form.cleaned_data['Name']
        B1 = form.cleaned_data['Benchmark1']
        B2 = form.cleaned_data['Benchmark2']
        B3 = form.cleaned_data['Benchmark3']

        dir_prof1 =  People_stats.objects.filter(name__exact=N)
        dir_prof2 =  People_stats.objects.filter(name__exact=B1)
        dir_prof3 =  People_stats.objects.filter(name__exact=B2)
        dir_prof4 =  People_stats.objects.filter(name__exact=B3)

        for d in dir_prof1:               
          con_ind1 = ['Basic Materials', d.con_basmat],['Consumer Goods', d.con_cgoods],['Consumer Services',d.con_cserv]

        for d in dir_prof2:               
          con_ind2 = ['Basic Materials', d.con_basmat],['Consumer Goods', d.con_cgoods],['Consumer Services',d.con_cserv]

        for d in dir_prof3:               
          con_ind3 = ['Basic Materials', d.con_basmat],['Consumer Goods', d.con_cgoods],['Consumer Services',d.con_cserv]

        for d in dir_prof4:               
          con_ind4 = ['Basic Materials', d.con_basmat],['Consumer Goods', d.con_cgoods],['Consumer Services',d.con_cserv]

        con_ind_dmp1 = json.dumps(con_ind1, cls=DjangoJSONEncoder)

        con_ind_dmp2 = json.dumps(con_ind2, cls=DjangoJSONEncoder)

        con_ind_dmp3 = json.dumps(con_ind3, cls=DjangoJSONEncoder)

        con_ind_dmp4 = json.dumps(con_ind4, cls=DjangoJSONEncoder)

      Template: 
         I don't think we need to make it that far to realize that this is not the way to go :( 
4

1 に答える 1

0

これを試して

for d in dir_prof1:
con_ind1 = {'基礎材料': d.con_basmat, '消費財': d.con_cgoods, '消費者サービス': d.con_cserv}

for d in dir_prof2:
con_ind2 = {'基礎材料': d.con_basmat, '消費財': d.con_cgoods, '消費者サービス',d.con_cserv}

for d in dir_prof3:
con_ind3 = {'基礎材料': d.con_basmat, '消費財': d.con_cgoods , '消費者サービス': d.con_cserv}

for d in dir_prof4:
con_ind4 = {'基礎材料': d.con_basmat, '消費財': d.con_cgoods, '消費者サービス': d.con_cserv}

con_ind_dmp1 = json.dumps(con_ind1)

con_ind_dmp2 = json.dumps(con_ind2)

con_ind_dmp3 = json.dumps(con_ind3)

con_ind_dmp4 = json.dumps(con_ind4)

于 2013-04-19T10:28:26.167 に答える