Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过查询访问MPTT模型的get_root_Python_Django_Django Mptt - Fatal编程技术网

Python 通过查询访问MPTT模型的get_root

Python 通过查询访问MPTT模型的get_root,python,django,django-mptt,Python,Django,Django Mptt,考虑以下示例: class ModelX(models.Model): fieldX = models.ForeignKey(ModelY) class ModelY(MPTTModel): def root(self): return get_root() root = property(root) 现在我想提出这样的问题 ModelX.objects.filter(fieldX__root=match) ModelX.objects.filt

考虑以下示例:

class ModelX(models.Model):
    fieldX = models.ForeignKey(ModelY)

class ModelY(MPTTModel):

    def root(self):
        return get_root()

    root = property(root)
现在我想提出这样的问题

ModelX.objects.filter(fieldX__root=match)
ModelX.objects.filter(fieldX__get_root=match)
或者像这样直接调用
get\u root()
更好

ModelX.objects.filter(fieldX__root=match)
ModelX.objects.filter(fieldX__get_root=match)
这将使
root()
方法变得多余

不过,以上这些似乎都不起作用。为什么呢

.filter()
接受关键字参数。从文档:

在Django 1.4中更改:在查找中指定的字段必须是模型字段的名称。 但有一个例外,在使用ForeignKey时,您可以指定 字段名后缀为_id。在本例中,value参数为 应包含外部模型主键的原始值

这意味着您不能基于模型方法进行查询。以下是一些可以帮助您的代码片段:

#returns all ModelX objects related to root nodes
ModelX.objects.filter(fieldX__level=0)

#first: get descendants of root node with id=1 (it can be any field lookups)
#second: get all ModelX nodes, related to previously founded nodes
nodes = ModelY.object.get(level=0, id=1).get_descendants()
ModelX.objects.filter(fieldX__in=nodes)
.filter()
接受关键字参数。从文档:

在Django 1.4中更改:在查找中指定的字段必须是模型字段的名称。 但有一个例外,在使用ForeignKey时,您可以指定 字段名后缀为_id。在本例中,value参数为 应包含外部模型主键的原始值

这意味着您不能基于模型方法进行查询。以下是一些可以帮助您的代码片段:

#returns all ModelX objects related to root nodes
ModelX.objects.filter(fieldX__level=0)

#first: get descendants of root node with id=1 (it can be any field lookups)
#second: get all ModelX nodes, related to previously founded nodes
nodes = ModelY.object.get(level=0, id=1).get_descendants()
ModelX.objects.filter(fieldX__in=nodes)

谢谢,但那不是我想要的。我想得到所有ModelX对象,其fieldX指向具有特定根的foreignkey。希望这是有意义的。
fieldX
应该指向一个根节点或某个根节点的任何后代?还有一个细节:是否只有一个根节点,或者可以是多个根节点?这一点很重要,因为
mptt
没有用于
的内置方法。获取子体
以获取节点列表。我不确定我是否理解您的意思,但不知道,每个对象应该只有一个关联的根节点(可以通过
get\u root()
访问)。所以我的问题是,我想得到属于特定根节点的所有对象。谢谢,但这不是我想要的。我想得到所有ModelX对象,其fieldX指向具有特定根的foreignkey。希望这是有意义的。
fieldX
应该指向一个根节点或某个根节点的任何后代?还有一个细节:是否只有一个根节点,或者可以是多个根节点?这一点很重要,因为
mptt
没有用于
的内置方法。获取子体
以获取节点列表。我不确定我是否理解您的意思,但不知道,每个对象应该只有一个关联的根节点(可以通过
get\u root()
访问)。所以我的问题是,我想得到属于特定根节点的所有对象。