Как сделать подкатегории для каждой категории в Django?
Всем привет. Есть категории в отдельном классе models.py, также написал отдельный класс для подкатегории. Все это закинул в admin.py, создал категории, и для каждой категории создал подкатегорий. Во views.py ничего больше не добавлял. Так вот, нужно ли написать для подкатегорий во views.py? И если нет, то как вывести в шаблоне с моделей? Еще можно ли сделать все это не создавая класс подкатегории в models.py?
models.py:
class Category(models.Model):
img = models.FileField(verbose_name='Фото категории')
name = models.CharField(max_length=25, verbose_name='Название')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Категории'
verbose_name = 'Категория'
ordering = ['name']
class SubCategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категория')
name = models.CharField(max_length=25, unique=True, verbose_name='Название')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'ПодКатегории'
verbose_name = 'ПодКатегория'
ordering = ['name']
views.py:
def index(request):
softs = Soft.objects.all()
categories = Category.objects.all()
context = {'softs': softs, 'categories': categories}
return render(request, 'main/index.html', context)
В этом я пока что новичок, так что строго не судите. И всем кто отозвался, заранее спасибо.
Ответы (2 шт):
Можно ли сделать все это не создавая класс подкатегории в models.py?
Нужно! Потому что подкатегорий может быть больше одной. Удобно использовать связь ForeignKey на ту же самую модель, указав self первым аргументом.
models.py:
class Category(models.Model):
parent_category = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
views.py:
categories = Category.objects.filter(parent_category=None)
template.html:
{% for category in categories %}
{% for subcategory in category.category_set.all %}
{{ subcategory }}
{% endfor %}
{% endfor %}
Как вывести [подкатегории] в шаблоне с моделей?
Через ForeignKey.related_name.
template.html:
{% for category in categories %}
{% for subcategory in category.subcategory_set.all %}
{{ subcategory }}
{% endfor %}
{% endfor %}