Django 1.10依靠模型ForeignKey

时间:2017-04-14 01:10:01

标签: python django

我想这一定很简单,但我已经尝试了好几个小时,却找不到任何帮助。

我有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>

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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>