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