2012-03-29 30 views
2

我想覆盖tree_id领域如下:MPTT - 如何覆盖“tree_id”

考虑:

class Thing(MPTTModel): 
    thing_id = models.AutoField(primary_key=True) 
    ... 

    class MPTTMeta: 
     tree_id = ? 

在创建“物”中第一个父我想发起tree_id与thing_id首次保存对象时分配。

接下来,对于稍后创建的“Thing”对象,我想传递之前创建的第一个父对象的thing_id。

即树中的所有节点将具有作为tree_id的第一祖先的objectId(thing_id)。

可能吗?

如何在创建“物品”对象时传递值?

编辑:

因此,似乎对我的需求的解决方案仅仅是:Thing.objects.get(PK = thing_id).get_descendants()

回答

1

我不知道你想什么做。 tree_id是一个django-mptt内部字段,它在mptt算法之外没有多少意义。

也许你正在尝试按thing_id排序你的树,这样最老的祖先的东西就会出现在树中?我不知道你为什么要这样做,但如果是这样的话,你应该使用order_insertion_by

class MPTTMeta: 
    order_insertion_by = ['thing_id'] 

文档:http://django-mptt.github.com/django-mptt/models.html#model-options

+0

所有我想要的是选择我的“东西”对象的子集。我在文档中看到了Genre.objects.all()的用法,并且认为如果与反向树中第一个祖先有关的所有“事物”都以tree_id作为第一个祖先的目标,那么选择它们会很容易如下所示:list = Thing.objects.filter(thing_type = 2,tree_id = thing_id) – bentzy 2012-03-29 19:06:01

+0

所以..你试图得到节点的后代?你可以使用Thing.objects.get(pk = 1).get_descendants() – craigds 2012-03-29 19:14:21