如何使用模板视图从 Django 一对多字段模型获取数据
How to get data from Django One to Many Fields Model using views into templates
我想显示 1 个 Parent 字段以及相关的 Child 以及 Childs
我有模特
class GrandParent(models.Model):
name= models.CharField(max_length=50)
....
class Parent(models.Model):
parent = models.ForeignKey(GrandParent, on_delete=models.CASCADE)
name= models.CharField(max_length=50)
....
class Child(models.Models):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
name= models.CharField(max_length=50)
...
我可以从 Grand Parent 渲染 objects 但我无法 link 进一步 Parent Class objects 和 Child class objects 在模板中
我在views.py
中使用的这种方法
def list(request):
object_list = GrandParent.published.all()
...
return render('app/list.html')
def detail(request, post,):
post = get_object_or_404(GrandParent, slug=post,
status='published')
return render(request, 'app/detail.html',
{'post' : post,
...
})
现在如何 link 在相同的详细信息视图中进一步 Classes 但与 Parent Classes 使用外键相关联。我正在关注 Django 文档,但他们只给出了最多 2 个使用 python shell 的示例,只有一个 subclass 我很困惑如何在这个结构中实现。或者任何人已经专门用这种类型的模型开发了任何项目,所以请分享任何 link 的 repo 或其他东西,会很棒。
#list.html
{% 扩展“_base.html” %}
{% block title %} mysite{% endblock %}
{% block content %}
<h2>Content </h2>
<ul>
{% for post in object_list %}
<a href="{{ post.get_absolute_url }}">
<li>{{ post.name}}</li></a>
{% endfor %}
</ul>
{% endblock %}
#detail.html
{% extends "_base.html" %}
{% block title %} freeStreams {% endblock %}
{% block content %}
<div class="card-body">
<h1 class="card-title">{{ post.title }}</h1>
</div>
{% endblock %}
您可以通过 for 循环它的所有子项来访问视图模板中的一对多。在你的例子中,GrandParent
by post.parent_set.all()
。 Child
parent.child_set.all()
。您可以先在终端中尝试检查您的数据库和关系是否正确。
将其添加到块内 content
detail.html
{% for parent in post.parent_set.all() %}
<h1 class="card-title">{{ parent.name }}</h1>
{% for child in parent.child_set.all() %}
<h2 class="card-title">{{ child.name }}</h2>
{% endfor %}
{% endfor %}
我想显示 1 个 Parent 字段以及相关的 Child 以及 Childs
我有模特
class GrandParent(models.Model):
name= models.CharField(max_length=50)
....
class Parent(models.Model):
parent = models.ForeignKey(GrandParent, on_delete=models.CASCADE)
name= models.CharField(max_length=50)
....
class Child(models.Models):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
name= models.CharField(max_length=50)
...
我可以从 Grand Parent 渲染 objects 但我无法 link 进一步 Parent Class objects 和 Child class objects 在模板中
我在views.py
中使用的这种方法def list(request):
object_list = GrandParent.published.all()
...
return render('app/list.html')
def detail(request, post,):
post = get_object_or_404(GrandParent, slug=post,
status='published')
return render(request, 'app/detail.html',
{'post' : post,
...
})
现在如何 link 在相同的详细信息视图中进一步 Classes 但与 Parent Classes 使用外键相关联。我正在关注 Django 文档,但他们只给出了最多 2 个使用 python shell 的示例,只有一个 subclass 我很困惑如何在这个结构中实现。或者任何人已经专门用这种类型的模型开发了任何项目,所以请分享任何 link 的 repo 或其他东西,会很棒。
#list.html {% 扩展“_base.html” %}
{% block title %} mysite{% endblock %}
{% block content %}
<h2>Content </h2>
<ul>
{% for post in object_list %}
<a href="{{ post.get_absolute_url }}">
<li>{{ post.name}}</li></a>
{% endfor %}
</ul>
{% endblock %}
#detail.html
{% extends "_base.html" %}
{% block title %} freeStreams {% endblock %}
{% block content %}
<div class="card-body">
<h1 class="card-title">{{ post.title }}</h1>
</div>
{% endblock %}
您可以通过 for 循环它的所有子项来访问视图模板中的一对多。在你的例子中,GrandParent
by post.parent_set.all()
。 Child
parent.child_set.all()
。您可以先在终端中尝试检查您的数据库和关系是否正确。
将其添加到块内 content
detail.html
{% for parent in post.parent_set.all() %}
<h1 class="card-title">{{ parent.name }}</h1>
{% for child in parent.child_set.all() %}
<h2 class="card-title">{{ child.name }}</h2>
{% endfor %}
{% endfor %}