2017-01-17 5 views
0

エラスティックサーチ(Djangoプロジェクト)でインデックスを作成するためにコードの重複を避けるにはどうすればよいですか?エラスティックサーチでコードの複製を防止する

私は弾性検索でオブジェクトを返すことはできませんが、同じ関連オブジェクトのさまざまな変数を使用して自分自身を見つけることが多いことは私の理解です。

たとえば、Studentのインデックスがあり、彼らが取っている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名が在籍したいとしましょう:私は、学生が中に在籍最初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

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) 
関連する問題