【发布时间】:2020-10-18 22:33:35
【问题描述】:
我已经使用自定义管理器为我的用户模型编写了自定义搜索,但是,我收到以下错误:
user = UserModel._default_manager.get_by_natural_key(username)
AttributeError: 'ProfileManager' object has no attribute 'get_by_natural_key'
下面是我的 AbstractUser 和 Manager 我该如何解决这个问题?
class ProfileManager(models.Manager):
def search(self, search_text):
search_vectors = (
SearchVector(
'username', weight='A', config='english'
) + SearchVector(
'first_name', 'last_name' , weight='B', config='english'
) + SearchVector(
'bio', weight='C', config='english'
)
)
search_query = SearchQuery(
search_text, config=' english__unaccent'
)
search_rank = SearchRank(search_vectors,search_query)
trigram = TrigramSimilarity(
'username',search_text
) + TrigramSimilarity(
'last_name',search_text
)
qs = (
self.get_queryset()
.filter(sv=search_query)
.annotate(rank=search_rank, trigram=trigram, bs=Greatest('rank','trigram'))
.filter(Q(bs__gte=0.35))
.order_by('-bs')
)
return qs
class Profile(AbstractUser):
'''
Some of my user fields
'''
objects = ProfileManager()
提前致谢!
【问题讨论】:
标签: django postgresql django-models django-views