2016-10-15 11 views
0

投稿された職業がランク付けされる小さなプロジェクトに取り組んでいます。ランク付けは、職業が掲載された回数に基づいて行われます。私はデータを照会し、職業をランク付けしました。しかし、テンプレートでは職業とそのパーセンテージを表示しようとすると、表示されるのは「ID」だけです。私は代わりに職業の名前を表示したい。下記のフローは #のmodels.pyあるテンプレート内のDjango注釈

class OccupationGroup(models.Model): 
     group=models.CharField(max_length=200) 
     def __str__(self): 
      return self.group 

    class Occupation(models.Model): 
     group=models.ForeignKey(OccupationGroup) 
     occupation=models.CharField(max_length=200) 
     def __str__(self): 
      return self.occupation 
    class OccupationData(models.Model): 
     group=models.ForeignKey(OccupationGroup) #added for testing 
     occupation=ChainedForeignKey(Occupation,chained_field='group', chained_model_field='group',)#added for testing 

     county=models.CharField(max_length=600) 
     date_of_advertisement=models.DateField(verbose_name="Date of Adveertisement") 
     #source=models.CharField(max_length=200,null=True, blank=True, verbose_name="Source") 
     positions=models.CharField(max_length=200, verbose_name="Number of positions") 

     def __str__(self): 
      return self.occupation 

views.py

def view(request): 
    context_dict={} 
    total_items = OccupationData.objects.count() 
    items = [ 
      {'data': g['occupation'], 'value': g['total'] * 100/  total_items} for g in data 
      ] 
context_dict={'data':items} 
return render(request,'template.html',context_dict) 

template.html

{% for data in data %} 

       {{data.data }} 
       {{ data.value|floatformat:"2" }}%<br> 

{% endfor %} 

サンプル出力

1 23% 
2 21.22% 
3 11.12% 

必要な出力

Chemists 23% 
Lawyers 21.22% 
Mathematicians 11.12% 

私はこの仕事を得る権利が得られませんか?

+0

を解決し、Iは{データ%のデータの%} {{data.data.occupation}} {{data.value | floatformat: "2"}}を行う場合%
{%endfor%}関連する職業のないパーセンテージを表示 – ombwayo

+1

あなたのビューでは 'data'はどこから来ますか? –

+0

データは** OccupationData **の職業分野のデータです** model – ombwayo

答えて

0

私はついにそれを理解しました。私はvalue()がデータベース関係を認識しないことを知りました。したがって、指定されたフィールドの正確な値が選択されます。したがって、ビューにすべての値を渡してからテンプレートに渡すことをお勧めします。 以下のコードは、問題

def view(request): 
    context_dict={} 
    total_items = OccupationData.objects.count() 
     data=DemandData.objects.values('occupation','occupation__occupation').annotate(total=Count('occupation')).order_by('-total') 
    items = [ 
      {'data': g['occupation__occupation'], 'value': g['total'] * 100/  total_items} for g in data 
      ] 
context_dict={'data':items} 
return render(request,'template.html',context_dict)