微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 查询匹配的“表亲”对象具有相同的祖父母

如何解决Django 查询匹配的“表亲”对象具有相同的祖父母

Validation on this object

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

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()

因此我们从 Child 模型开始,向上移动到 grandparent(使用 parent__grandparent,然后向下移动使用 __parents,并检查这样的标识符是否已经存在)。这里的 parents 是从 ForeignKeyParent 以及从 GrandParentChildParentrelated_query_name=… [Django-doc] 的值.如果您没有指定 related_query_name=… 参数,它将使用 related_name=… [Django-doc] 作为该名称,如果您也没有指定,那么它将使用小写的模型名称。

这当然会检查所有孙子,包括您要编辑且已存在于数据库中的孙子。因此,您可以排除一个区域存在的Child

Child.objects.exclude(
    pk=pk_of_child_to_exclude
).filter(
    identifier=identifier,parent__grandparent__parents=active_parent
).exists()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。