【问题标题】:Django error creating user manager for AbstractUserDjango 为 AbstractUser 创建用户管理器时出错
【发布时间】: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


    【解决方案1】:

    ProfileManager 应该从 BaseUserManager 继承,因为您正在处理 auth 用户管理器

    from django.contrib.auth.models import BaseUserManager
    
    
    class ProfileManager(BaseUserManager):
        ...

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多