2014-03-19 33 views
0

我有一個樹狀結構模型,該模型是:過濾器是當前類

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

我的目標是讓樹的葉子,就意味着這是所有條目,其可以」在父屬性中找不到。我試圖與查詢集要做到這一點,但我不知道該怎麼做:

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

沒有人有線索?我可以通過給孩子而不是父母來構建樹,但我發現這個表示更好。

謝謝!

回答

0

我發現了一個辦法做到這一點:

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

這不是優雅,但它的工作原理。如果有人有更好的解決方案,請隨時回答!

0

這將不正是你想要在一個單一的查詢:

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

leaves = XMLStruct.objects.filter(children=None) 
相關問題