如何在 django 中从一对多关系中检索数据?
Posted
技术标签:
【中文标题】如何在 django 中从一对多关系中检索数据?【英文标题】:How to retrieve data from one to many relations in django? 【发布时间】:2017-01-12 15:17:20 【问题描述】:我正在使用 django 1.10 制作我的个人网站
这里是技能应用的模型:
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Skill(models.Model):
name = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Subskill(models.Model):
skill = models.ForeignKey(Skill, on_delete=models.CASCADE)
name = models.CharField(max_length=256)
link = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)
def __unicode__(self):
return self.name
def __str__(self):
return self.name
并查看:
from django.shortcuts import render
from skill.models import Skill,Subskill
# Create your views here.
def home(request):
skill = Skill.objects.all()
subskill =Subskill.objects.all()
context = 'skills':skill,
'subskills':subskill
return render(request, 'skill.html', context)
这是我的模板页面:
skill.html
% block skill %
% for subskill in subskills %
subskill.skill.name
subskill.name
% endfor %
% endblock skill %
假设,有一个技能叫网页设计,它有两个子技能,分别是 html 和 css。 我想在视图页面中呈现技能名称,它是两个子名称:
网页设计
HTML
CSS
但它呈现为像网页设计 Html 网页设计 CSS
请帮我解决这个问题。
【问题讨论】:
【参考方案1】:你可以对技能本身做realted query https://docs.djangoproject.com/en/1.10/topics/db/queries/#backwards-related-objects
# example
skill_obj = Skill.objects.all()[0]
subskills = skill_obj.subskill_set.all()
或者在你的情况下
def home(request):
skills = Skill.objects.all().prefetch_related('subskill_set') # optimizing
context = 'skills':skills
return render(request, 'skill.html', context)
在模板中
% for skill in skills %
skill.name
% for subskill in skill.subskill_set.all %
subskill.name
% endfor %
% endfor %
【讨论】:
它显示错误,就像'QuerySet'对象没有属性'subskill_set' 阅读更新的答案skill = skill.subskil_set.all()
是为了在技能是对象而不是查询集时应用
重新格式化一下 % 技能中的技能 % subskill.skill.name % 技能中的子技能 %
@Engr.TanbirHasan 再次复制并粘贴代码。我稍微改了一下。
哇!这是工作。大老板。你是一个真正的摇滚明星。谢谢你。 :)以上是关于如何在 django 中从一对多关系中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章