Как получить дочерние элементы 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 %}

Знаю, можно проще сделать, но это я взял для примера как этим пользоваться

Вернуться на верх