如何解决如何在 Django 模型中获取其类别的子类别并在模板中显示
我想展示我的技能类别及其子类别列表。 我在将数据从模型获取到视图时遇到问题。 我的代码如下:
model.py 这里我创建了 2 个类 SkillCategory 和 SkillSubCategory
class SkillCategory(models.Model):
id = models.AutoField(primary_key=True)
category = models.CharField(max_length=100)
def __str__(self):
return self.category
class SkillSubCategory(models.Model):
id = models.AutoField(primary_key=True)
category = models.ForeignKey(SkillCategory,on_delete=models.CASCADE)
subcategory = models.CharField(max_length=100)
icon_name = models.CharField(max_length=100)
def __str__(self):
return self.subcategory
views.py 这里我定义了一个名为 skill 的基于函数的视图,它返回列表列表
def skill(request):
allsubcat = []
skillcat = SkillSubCategory.objects.values()
cat = {c['subcategory'] for c in skillcat}
for c in cat:
skill = SkillSubCategory.objects.filter(subcategory=c)
allsubcat.append([skill])
ctx = {'allsubcat':allsubcat}
return render(request,"my_folio/skill.html",ctx)
skill.html 这是显示技能的模板,如:
- 技能类别 1
- 技能子类别 1
- 技能 SubCat 2
- 技能类别 2
- 技能子类别 1
- 技能 SubCat 2
- 技能 SubCat 3
任何人都可以帮我解决给定的问题。
谢谢和欢呼!!
解决方法
仅传递上下文中的 SkillCategory
查询集:
def skill(request):
skill_categories = SkillCategory.objects.all()
ctx = {'skill_categories': skill_categories}
return render(request,"my_folio/skill.html",ctx)
现在在模板中你可以像这样循环:
<ul>
{% for skill_category in skill_categories %}
<li>{{ skill_category.category }}
<ul>
{% for skill_subcategory in skill_category.skillsubcategory_set %}
<li>{{ skill_subcategory.subcategory }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
其中 skillsubcategory_set
只是小写的相关模型名称,并附加了 _set。 Django 将此属性添加到模型的每个相关字段的模型中(注意: _set 将仅附加到形式为一对多和多对多的关系中,您也可以使用 { 指定名称任何 ForeignKey、OneToOneField、ManyToManyField 等的 {1}} 属性)。
你可以为反向关系添加这样的相关名称
class SkillSubCategory(models.Model):
id = models.AutoField(primary_key=True)
category = models.ForeignKey(SkillCategory,on_delete=models.CASCADE,related_name="skill_subcategories")
subcategory = models.CharField(max_length=100)
icon_name = models.CharField(max_length=100)
def __str__(self):
return self.subcategory
在视图上下文中,您只能传递技能
def skill(request):
skills_categories = SkillCategory.objects.all()
ctx = {'skill_categories': skills_categories}
return render(request,ctx)
在模板中你可以像这样迭代
<ul>
{% for category in skill_categories %}
<li>{{ category.category }}</li>
<ul>
{% for subcategory in category.skill_subcategories.all %}
<li>{{ subcategory.category }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。