Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中列出与项关联的所有外键_Python_Django - Fatal编程技术网

Python 如何在Django中列出与项关联的所有外键

Python 如何在Django中列出与项关联的所有外键,python,django,Python,Django,我正在尝试用Django构建一个简单的清单应用程序。我使用的是一种语言数据类型和一种具有语言外键的技术数据类型。我想在该语言下显示与该语言相关的所有技术。以下是我当前的设置: models.py from __future__ import unicode_literals from django.db import models class Language(models.Model): name = models.CharField(max_length = 32) def

我正在尝试用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')
URL.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%}
{%extends'personal/header.html%}
{%block content%}
{%for object_list%中的技术}
{{technology.name}
{{technology.language}}
{%endfor%}
{%endblock%}

我认为我需要将这些技能作为URL文件中的第二个查询集传递到模板中,但我不是很确定。我应该如何处理这些相关的数据集,使它们以我想要的方式返回和显示?

您可以在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 %}
{%block content%}
{对象_列表%中的lang的%s}
{{lang.name}
{lang.technology_set.all%}
{{tech.name}
{%endfor%}
{%endfor%}
{%endblock%}

您可以返回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 %}
{%block content%}
{对象_列表%中的lang的%s}
{{lang.name}
{lang.technology_set.all%}
{{tech.name}
{%endfor%}
{%endfor%}
{%endblock%}

这是有效的。阅读
.prefetch\u related('technology\u set')
的代码片段到底在做什么?@d00medman优化相关对象的数据库访问:。好吧,因此prefetch\u related针对的是链接到每种语言的所有技术,并将它们附加到
q
数据集,允许我在视图中对每种技术进行迭代?这很有效。代码片段读取的确切内容是什么?prefetch_related('technology_set')在做什么?@d00medman优化相关对象的数据库访问:。好吧,prefetch_related针对的是链接到每种语言的所有技术,并将它们附加到
q
数据集,允许我在视图中对每种技术进行迭代?