[英]Preventing duplication of code; parametrize a single function, or create two separate functions?
[英]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.