Получить всех детей категории id в списке drf
У меня есть такая модель
class Catgeory(models.Model):
name = models.CharField()
parent = models.ForeignKey('self', related_name='children')
Теперь мне нужно написать часть кода, чтобы вернуть список всех идентификаторов детей для указанной категории
Например, у меня есть такая категория
General (id=1) --> Electronics (id=2) --> Mobile phones (id=3) --> Apple (id=4)
Если я хочу получить дочерние элементы Электроника, то это должно вернуть [3, 4]. Но я уже 3 часа пытаюсь найти решение, к сожалению, пока не смог. Я могу получить всех родителей по одному ребенку, но не могу получить детей по родителю. Если у кого-нибудь есть решение или какая-нибудь идея, можете ли вы помочь? Любая помощь будет оценена по достоинству! Большое спасибо!
Чтобы получить все дочерние категории, мы можем попробовать подход bfs
models.py
class Catgeory(models.Model):
name = models.CharField(max_length=60)
parent = models.ForeignKey('self', related_name='children', on_delete=models.SET_NULL, null=True, blank=True)
views.py
from django.http.response import HttpResponse
from .models import Catgeory
# Create your views here.
def index(request):
category = Catgeory.objects.get(id=1)
child_category = Catgeory.objects.filter(parent=category)
queue = list(child_category)
while(len(queue)):
next_children = Catgeory.objects.filter(parent=queue[0])
child_category = child_category.union(next_children)
queue.pop(0)
queue = queue + list(next_children)
return HttpResponse(child_category)
Вы можете попробовать это
class Catgeory(models.Model):
name = models.CharField()
parent = models.ForeignKey('self', related_name='children')
def get_all_child(self):
children = []
for u in self.children.all():
children.append(u.get_all_child())
return children
Но вы должны быть уверены, что у вас нет этого (child==parent), потому что если у вас есть такой случай, у вас будет бесконечный цикл. Будьте осторожны.