过滤外键,即当前类

时间:2014-03-19 16:44:45

标签: django filter django-queryset

我有一个树形结构模型:

class XMLStruct(models.model):
    parent = models.ForeignKey('XMLStruct')
    # other attributes

我的目标是获取树的叶子,这意味着这是在父属性中找不到的所有条目。我尝试使用Queryset执行此操作,但我不知道如何执行以下操作:

leaves = XMLStruct.objects.filter(parent__not_in = XMLStruct.objects.all().parent)

有没有人有线索?我可以通过给孩子而不是父母来构建树,但我发现这种表示更好。

谢谢!

2 个答案:

答案 0 :(得分:0)

我找到了一种方法:

parents = XMLStruct.objects.all().values_list('parent',flat=True)
all = XMLStruct.objects.all()
result = list(set(all) - set(parents))

它不优雅但它有效。如果有人有更好的解决方案,请随时回答!

答案 1 :(得分:0)

这将在单个查询中完全符合您的要求:

class XMLStruct(models.model):
    parent = models.ForeignKey('XMLStruct', related_name='children')
    # other attributes

leaves = XMLStruct.objects.filter(children=None)