2017-04-14 91 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>