elasticsearch,Python,Django,elasticsearch" /> elasticsearch,Python,Django,elasticsearch" />

Python 弹性搜索中防止代码重复

Python 弹性搜索中防止代码重复,python,django,elasticsearch,Python,Django,elasticsearch,在弹性搜索(Django项目)中,如何避免为了索引目的而重复代码 我的理解是,在弹性搜索中不能返回对象,但很多时候我发现自己使用同一相关对象的不同变量 例如,如果我有一个学生的索引,并且需要关于他们正在学习的科目的信息。如果我想要学生注册的第一个科目,我会在弹性搜索中这样做: ... first_subject_enrolled_id = indexes.IntegerField(model_attr='service__id') def prepare_first_subject_enrol

在弹性搜索(Django项目)中,如何避免为了索引目的而重复代码

我的理解是,在弹性搜索中不能返回对象,但很多时候我发现自己使用同一相关对象的不同变量

例如,如果我有一个
学生的索引
,并且需要关于他们正在学习的
科目的信息。如果我想要学生注册的第一个
科目
,我会在弹性搜索中这样做:

...
first_subject_enrolled_id = indexes.IntegerField(model_attr='service__id')

def prepare_first_subject_enrolled_id(self, obj):
    first_subject_enrolled = Subject.objects.filter(student=obj).order_by('id')
    return first_subject_enrolled.id
但是,假设我还想要注册的第一个班级的
科目
名称。我必须重复很多代码。例如:

def prepare_first_subject_name(self, obj):
        first_subject_enrolled = Subject.objects.filter(student=obj).order_by('id')
        return first_subject_enrolled.name
有没有一种方法可以直接调用索引函数prepare_first_subject_registered_id来避免类似代码的重复和不必要的索引

尝试使用getattr()函数。看见您可以动态地将想要的属性传递给同一个函数。我还没有测试下面的代码,但我相信它会让你走上正轨

def prepare_first_subject_name(self, obj, obj_attribute):
    first_subject_enrolled = Subject.objects.filter(student=obj).order_by('id')
    return getattr(first_subject_enrolled, obj_attribute)