自身的 Django 外键

Django Foreign key on self

型号:

class Category(models.Model):
  name = models.CharField()
  parent = models.ForeignKey('self', null=True, related_name='subcategories')

每次函数调用都会访问数据库:

    def get_children(elem, lst):
        lst.append(elem.pk)
        children = elem.subcategories.all()
        if not children: return
        for c in children:
            get_children(c, lst)

lst=[]
get_children(Category.objects.prefetch_related('subcategories').get(pk=1), lst) # prefetch related is not working

如何在一次查询中获取所有 table?

您无法通过一次查询获取所有子项。您应该考虑对分层数据使用 django-mptt 应用程序。