如何在 Django 模型中获取子类别及其类别并在模板中显示
How to get subcategory with their category in django models and showing in templates
我想展示我的技能类别及其子类别列表。
从模型中获取数据到视图时,我遇到了问题。
我的代码如下:
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 其中 return list of list
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
- 技能子类别 2
- 技能类别 2
- 技能子类别 1
- 技能子类别 2
- 技能子类别 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 将仅附加到一对多和多对多形式的关系,您也可以指定在任何外键、OneToOneField、ManyToManyField 等上使用 related_name
属性的名称)。
你可以添加这样的相关名称以建立反向关系
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, "my_folio/skill.html", 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>
我想展示我的技能类别及其子类别列表。 从模型中获取数据到视图时,我遇到了问题。 我的代码如下:
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 其中 return list of list
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
- 技能子类别 2
- 技能类别 2
- 技能子类别 1
- 技能子类别 2
- 技能子类别 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 将仅附加到一对多和多对多形式的关系,您也可以指定在任何外键、OneToOneField、ManyToManyField 等上使用 related_name
属性的名称)。
你可以添加这样的相关名称以建立反向关系
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, "my_folio/skill.html", 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>