弹性搜索中防止代码重复

2024-04-19 06:20:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在弹性搜索(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

有没有一种方法可以调用index函数prepare\u first\u subject\u registered\u id来避免重复和不必要地索引类似的代码


Tags: 对象代码selfidobjobjectsdeffilter
1条回答
网友
1楼 · 发布于 2024-04-19 06:20:22

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

相关问题 更多 >