2016-10-15 5 views
0

Ich arbeite an einem kleinen Projekt, in dem Berufe gebucht werden sollen, um eingestuft werden. Die Rangliste basiert auf der Häufigkeit, mit der ein Beruf gebucht wird. Ich habe es geschafft, die Daten abzufragen und den Beruf zu ordnen. In der Vorlage, wenn ich versuche, die Berufe und ihre Prozentsätze anzuzeigen, wird nur ihre 'ID' angezeigt. Ich möchte stattdessen den Namen des Berufes sehen. Im Folgenden sind die Flüsse # models.pyDjango Annotate in Vorlage

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 %} 

Beispielausgabe

1 23% 
2 21.22% 
3 11.12% 

erforderliche Ausgabe

Chemists 23% 
Lawyers 21.22% 
Mathematicians 11.12% 

Was bekomme ich nicht richtig, um diese Arbeit zu bekommen?

+0

und wenn ich es tue {% für Daten in Daten%} {{data.data.occupation}} {{ data.value | floatformat: "2"}} %
{% endfor%} zeigt Prozentsätze ohne zugehörige Berufe an – ombwayo

+1

Woher kommen 'Daten' aus Ihrer Sicht? –

+0

Daten stammen aus dem Berufsfeld in ** OkkupationDaten ** Modell – ombwayo

Antwort

0

Ich endlich herausgefunden. Ich habe gelernt, dass die value() keine Datenbankbeziehung erkennt. Er wählt den genauen Wert im angegebenen Feld aus. Es empfiehlt sich daher, alle Werte in den Ansichten abzurufen, bevor Sie sie an die Vorlage übergeben. der Code unten löste das Problem

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)