繁体   English   中英

防止Elastic Search中的代码重复

[英]Preventing code duplication in Elastic Search

为了避免在Elastic Search(Django Project)中建立索引,我如何避免代码重复?

据我了解,您无法在弹性搜索中返回对象,但是很多时候我发现自己使用的是来自同一相关对象的不同变量。

例如,如果我有一个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来避免相似代码的重复和不必要的索引编制?

尝试使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM