django_elasticsearch_dsl中的def get_instances_from_related()方法的用途是什么

sqougxex  于 2023-03-24  发布在  Go
关注(0)|答案(2)|浏览(63)

我正在为python Django项目创建一个具有相关表的模型的ElasticSearch索引。
当我工作的时候,我遇到了网站https://pypi.org/project/django-elasticsearch-dsl/6.4.2/。我已经按照步骤并为我的模型实现了ElasticSearch,它工作得很好。
但是我找不到def get_instances_from_related(self,related_instance)方法的用途。为什么我们要使用这个方法,在哪里以及何时调用它。
有人能解释一下吗?
谢谢你。

p8h8hvxi

p8h8hvxi1#

假设您有Document

class ChildDocument(Document):

    parent = fields.ObjectField(properties={
        ...
    })

    class Index:
        name = 'children'
        settings = {'number_of_shards': 1,
                    'number_of_replicas': 0}

    class Django:
        model = Child
        related_models = [Parent]
        queryset_pagination = 5000

        fields = [
        ...
        ]

    def get_instances_from_related(self, related_instance):
        if isinstance(related_instance, Parent):
            return Child.objects.filter(parent=related_instance)

get_instances_from_related()related_models之一发生变化时使用(在我们的例子中是Parent对象)。django_elasticsearch_dsl需要引用parent对象的所有Child对象的列表,以便它可以更新索引中每个childparent字段。

0ejtzxu1

0ejtzxu12#

如文档中所述,get_instances_from_related()是一个方法,您定义它来获取以某种方式链接到related_instanceDocument.Django.model的所有示例(如ForeignKey,ManyToMany)。
它非常简洁,因为它可以支持多个相关模型。你只需要指定一种方法,通过related_model获取主模型的QuerySet,并将相关示例作为参数传递。

相关问题