如何在弹性搜索(Django项目)中进行索引编制时避免代码重复?
我的理解是你不能在弹性搜索中返回对象,但很多时候我发现自己使用来自同一相关对象的不同变量。
例如,如果我有Student
的索引,并且需要有关他们正在采取的Subject
的信息。如果我想要第一个Subject
学生注册,我会在弹性搜索中做这样的事情:
...
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
但是,让我们说我也想要注册的第一堂课的Subject
名称。我不得不重复很多代码。例如:
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_enrolled_id来避免重复和类似代码的不必要索引?
答案 0 :(得分:0)
尝试使用getattr()函数。见Python string to attribute。您可以动态地将所需的属性传递给同一个函数。我还没有测试下面的代码,但我相信它会让你走上正轨。
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)