2017-01-16 49 views
0

我有一個用戶模式,我有一個輪廓模型擴展它:Django的彈性搜索填入外鍵的字段

class ProfileIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    username = indexes.CharField(model_attr='user') 
    first_name = indexes.CharField(model_attr='first_name') 
    last_name = indexes.CharField(model_attr='last_name') 
    user = indexes.CharField(model_attr='user') 

    def get_model(self): 
     return Profile 

    def index_queryset(self, using=None): 
     """Used when the entire index for the profile model is updated""" 
     return self.get_model().objects.all() 

    def prepare_tags(self, obj): 
     return [tag.name for tag in obj.tags.all()] 

    def prepare_username(self, obj): 
     return obj.user.username 

    def prepare_last_name(self, obj): 
     print obj.user.last_name, " : <== LAST NAME\n" 
     return obj.user.last_name# 

    def prepare_first_name(self, obj): 
     print obj.user.first_name, " : <== FIRST NAME\n" 
     return obj.user.first_name 

我想要的搜索結果對象包含名字和用戶的姓氏是有在Django的默認用戶模型。我將如何獲得這樣的結果?

+0

你在'model_attr'使用它呢? – AKS

回答

0

documentation你可以找到model_attr也可以期待通過關係:

model_attr關鍵字參數還可以查看通過模型關係。因此,您可以像model_attr='author__first_name'那樣執行類似於Django的ORM所使用的查找操作的作者的名字。

所以,你可以使用:

username = indexes.CharField(model_attr='user__username') 
first_name = indexes.CharField(model_attr='user__first_name') 
last_name = indexes.CharField(model_attr='user__last_name') 

一旦你做到了這一點,你不需要準備功能,例如prepare_first_nameprepare_last_name

+0

我profile_text FILD會像 –

+0

{{object.user.first_name}} {{object.user.last_name}} –

+0

我不明白您的評論。 – AKS