我有一个用户模型,我使用个人资料模型扩展了它:
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 :(得分: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_name
,prepare_last_name
等。