我正在尝试使用Django构建一个简单的列表应用程序。我使用的是语言数据类型和具有语言外键的技术数据类型。我希望显示与该语言下的语言相关的所有技术。这是我目前的设置:
models.py
from __future__ import unicode_literals
from django.db import models
class Language(models.Model):
name = models.CharField(max_length = 32)
def __str__(self):
return self.name
class Technology(models.Model):
class Meta:
verbose_name_plural = 'technologies'
name = models.CharField(max_length = 32)
description = models.TextField()
language = models.ForeignKey(Language)
def __str__(self):
return self.name
views.py:
def skills(request):
return render(request, 'personal/skills.html')
urls.py:
from django.conf.urls import url, include
from . import views
from django.views.generic import ListView
from personal.models import Language, Technology
urlpatterns = [
url(r'^$', views.index, name='index'), # Defining url patterns. As things stand, we have a start and an end
url(r'^contact/', views.contact, name='contact'),
url(r'^skills/$', ListView.as_view(queryset=Technology.objects.all(), template_name='personal/skills.html'))
]
skills.html:
{%extends 'personal/header.html'%}
{%block content%}
{%for technology in object_list%}
<h3>{{technology.name}}</h3>
<h5>{{technology.language}}</h5>
{%endfor%}
{%endblock%}
我认为我需要将技能作为URLS文件中的第二个查询集传递给模板,但我不太确定。我应该如何处理这些相关数据集,让它们以我想要的方式返回和显示?
答案 0 :(得分:3)
您可以在QuerySet中返回语言,然后从那里访问技术:
q = Language.objects.all().prefetch_related('technology_set')
...
url(r'^skills/$', ListView.as_view(queryset=q, template_name='personal/skills.html'))
在你的模板中:
{% block content %}
{%for lang in object_list %}
<h3>{{ lang.name }}</h3>
{% for tech in lang.technology_set.all %}
<h5>{{ tech.name }}</h5>
{% endfor %}
{% endfor %}
{% endblock %}