Как получить дочерние элементы django
Есть вот такая вот модель как получить все дочерние элементы класса PartList
class PartList(models.Model):
name = models.CharField(max_length=250, verbose_name='Имя для категории')
slug = models.SlugField(max_length=255, verbose_name='slug для категории', unique=True)
image = models.ImageField(upload_to='images/shop', blank=True)
def __str__(self):
return self.list_name
class Category(models.Model):
parts = models.ForeignKey(PartList, on_delete=models.CASCADE, blank=True, null=True, related_name='parent',
verbose_name='подкатегория')
name = models.CharField(max_length=250, verbose_name='Название подкатегории',)
slug = models.SlugField(max_length=250, verbose_name='slug поле подкатегории')
image = models.ImageField(upload_to='images/shop', blank=True)
def __str__(self):
return f'{self.category_name} {self.part_list.list_name}'
Если я вас правильно понял и вам необходимо получить все объекты категории по связи ForeignKey нужно использовать select_related:
queryset = Category.objects.select_related('parts').all()
print('==',queryset)
Можно получить также объект класса PartList по id
и по связи получить связанные объекты:
p_list= PartList.objects.get(id=1)
categories = p_list.parent.all()
print('categories: ', categories)
Вы можете в ForeignKey использовать related_name аргумент. Он позволит обращаться к связанным данным.
class PartList(models.Model):
pass
class Category(models.Model):
category = models.ForeignKey(Category, ... related_name='categories')
Например, в шаблоне вы можете к нему обращаться вот так:
{% for part in partlist %}
{% for category in part.categories.all %}
{{ category.name }}
...
{% endfor %}
{% endfor %}
Знаю, можно проще сделать, но это я взял для примера как этим пользоваться