#python-3.x #django #python-3.8
#python-3.x #django #python-3.8
Вопрос:
Я хочу представить свою категорию навыков со списком их подкатегорий. Я сталкиваюсь с проблемой при извлечении данных из моделей в представления. мой код приведен ниже:
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 Здесь я определяю функциональное представление с именем навык, которое возвращает список списка
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
- Навык SubCat 1
- Навык SubCat 2
- Категория навыков 2
- Навык SubCat 1
- Навык SubCat 2
- Навык SubCat 3
Может ли кто-нибудь, пожалуйста, помочь мне по данной проблеме.
Спасибо и приветствия!!
Ответ №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, "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>
Комментарии:
1. Спасибо, чувак! Но я должен добавить еще одно это в ваш код <li>{{ subcategory.subcategory }}</li> . И у меня это отлично работает. Большое спасибо.
2. Братан, у меня есть еще одно сомнение, если вы можете помочь, пожалуйста, свяжитесь со мной на любой платформе. shubhamkgupta.in Спасибо, я жду вашего ответа…
Ответ №2:
Передайте только 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 будет добавлен только для отношений вида Один ко многим и многие ко многим, также вы можете указать имя, используя related_name
атрибут для любого ForeignKey, OneToOneField, ManyToManyField и т. Д.).