【问题标题】:Preventing code duplication in Elastic Search防止 Elastic Search 中的代码重复
【发布时间】:2017-01-18 02:14:14
【问题描述】:

如何避免代码重复以在 Elastic Search(Django 项目)中建立索引?

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

例如,如果我有一个Student 的索引并且需要有关他们正在使用的Subjects 的信息。如果我想要学生注册的第一个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 来避免重复和对类似代码进行不必要的索引?

【问题讨论】:

    标签: python django elasticsearch


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多