我有 self 引用的用户模型。现在我需要获取给定用户的所有 child 。
class MyUser(AbstractBaseUser, PermissionsMixin):
.....
parent = models.ForeignKey('self', blank=True, null=True, related_name ='children')
用户A有子用户B
用户B有子用户C
用户 C 有子用户 D
所以如果我有给定的用户 A 那么我想得到 p>
用户 B、C、D 作为结果
如何使用 Django 查询来做到这一点??
最佳答案
聚会有点晚了,但我遇到了同样的问题。 Selcuk 的回答引发了一个 AttributeError,我写了一个改进的函数(但对他们表示敬意)。对于我的用例,我还需要一种方法来找到所有父级,并且我通过在我的 clean
方法中禁止循环关系来确保避免无限循环。
from django.core.exceptions import ValidationError
class MyUser(AbstractBaseUser, PermissionsMixin):
parent = models.ForeignKey('self', blank=True, null=True,
related_name="children")
def get_all_children(self):
children = [self]
try:
child_list = self.children.all()
except AttributeError:
return children
for child in child_list:
children.extend(child.get_all_children())
return children
def get_all_parents(self):
parents = [self]
if self.parent is not None:
parent = self.parent
parents.extend(parent.get_all_parents())
return parents
def clean(self):
if self.parent in self.get_all_children():
raise ValidationError("A user cannot have itself \
or one of its' children as parent.")
关于python - Django 使用 Django 查询集获取所有后代子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617839/