2017-04-14 96 views
0

我想這一定很簡單,但我一直在嘗試幾個小時,找不到任何幫助。Django 1.10指望模型ForeignKey

我有2個型號。一個用於模板類別,另一個爲模板

我列出主頁上的模板類別和每個類別我想顯示有多少模板有這一類的外鍵。

我的代碼如下:

Models.py

class TemplateType(models.Model): 
    type_title = models.CharField(max_length=60) 
    type_description = models.TextField() 
    file_count = models.ForeignKey('TemplateFile') 

    def __str__(self): 
     return self.type_title 

    def get_absolute_url(self): 
     return "/templates/%s/" %(self.id) 

class TemplateFile(models.Model): 
    template_type = models.ForeignKey(TemplateType, on_delete=models.DO_NOTHING) 
    template_file_title = models.CharField(max_length=120) 
    template_file_description = models.TextField() 

    def __str__(self): 
     return self.template_file_title 

Views.py

from django.shortcuts import HttpResponse 
from django.shortcuts import render, get_object_or_404 
from django.db.models import Count 

from .models import TemplateType 
from .models import TemplateFile 

def home(request): 
    queryset = TemplateType.objects.all().order_by('type_title').annotate(Count('file_count')) 

    context = { 
     "object_list": queryset, 
     "title": "Home", 
    } 
    return render(request, "index.html", context) 

的index.html

<div class="row"> 
     {% for obj in object_list %} 
     <div class="template_type col-md-6"> 
      <a href="{{ obj.get_absolute_url }}"> 
       <h4>{{ obj.type_title }}</h4> 
      </a> 
      <p>{{ obj.type_short_description }}</p> 
      <button class="btn btn-primary" type="button">Templates <span class="badge">{{ obj.file_count__count }}</span></button> 
     </div> 
     {% endfor %} 
    </div> 

有人可以幫忙嗎?

回答

0

Views.py

from django.shortcuts import HttpResponse 
from django.shortcuts import render, get_object_or_404 
from django.db.models import Count 

from .models import TemplateType 
from .models import TemplateFile 

def home(request): 
    queryset = TemplateType.objects.order_by('type_title').annotate(num_file=Count('file_count')) 

    context = { 
     "object_list": queryset, 
     "title": "Home", 
    } 
    return render(request, "index.html", context) 

現在object_list中包含TemplateType對象。並且您可以訪問num_file,如:object_list[0].num_file。在你的模板中使用它。

的index.html

<div class="row"> 
     {% for obj in object_list %} 
     <div class="template_type col-md-6"> 
      <a href="{{ obj.get_absolute_url }}"> 
       <h4>{{ obj.type_title }}</h4> 
      </a> 
      <p>{{ obj.type_short_description }}</p> 
      <button class="btn btn-primary" type="button">Templates <span class="badge">{{ obj.num_file }}</span></button> 
     </div> 
     {% endfor %} 
    </div>