Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
用于匹配的Django查询';表亲';对象(具有相同的祖父母)_Django_Querying - Fatal编程技术网

用于匹配的Django查询';表亲';对象(具有相同的祖父母)

用于匹配的Django查询';表亲';对象(具有相同的祖父母),django,querying,Django,Querying,我正在尝试对表单输入编写一些验证,并且需要检查正在创建的实例是否已经存在于同一个祖父母下。我要验证的字段不是主键,因为它可以存在于“家族”之外。 我似乎想不出一个合适的查询,但到目前为止,我有以下几点是可行的: existing_parents = Parent.objects.filter(grandparent=active_parent.grandparent) for parent in existing_parents: existing_children = parent.c

我正在尝试对表单输入编写一些验证,并且需要检查正在创建的实例是否已经存在于同一个祖父母下。我要验证的字段不是主键,因为它可以存在于“家族”之外。 我似乎想不出一个合适的查询,但到目前为止,我有以下几点是可行的:

existing_parents = Parent.objects.filter(grandparent=active_parent.grandparent)
for parent in existing_parents:
    existing_children = parent.children.all()
            for children in existing_children
                if existing_children.identifier == identifier:
                    self._errors["form_field"] = self.error_class(
                        ["That child already exists"]
                    )
                else: 
                    pass

只是想知道是否有一个查找可以简化它?

是的,您可以通过以下方式进行检查:

Child.objects.filter( identifier=identifier, parent__grandparent__parents=active_parent ).exists()
你能分享模型吗?究竟什么是祖父母、父母等等。?这些与
ForeignKey
s有什么关系?谢谢!尝试将其付诸实践,但它似乎会在找到具有匹配标识符的实例时调用错误,即使是来自另一个gradnparent对象(我不想要)。也许我应该发布模型。@fdeboo:你确定它不是你想要更新的那个孩子吗?请注意,子对象可以是同一父对象。所以他们可以是同一个孩子、兄弟姐妹或堂兄弟姐妹。@fdeboo:这就是为什么,如果你想更新一个孩子,你应该排除你正在更新的孩子,除此之外,这个查询非常正确:您要更新的子对象当然有一个具有相同标识符的表亲:他自己。我确信这是保存/创建子对象之前的验证。让我再确认一下我没做什么stupid@fdeboo当前位置我想我误解了这个问题。通常情况下,现在应该修复它。 Child.objects.exclude( pk=pk_of_child_to_exclude ).filter( identifier=identifier, parent__grandparent__parents=active_parent ).exists()