2013-01-02 2 views
4

User.objects.filter/get에 대한 호출로사용자 개체는 True로 설정되어 있어야합니다. , 내가 할) 나는 User.objects.get (로 전화를 걸하려고 할 때,Django 사용자 관리자를 오버라이드하여 쿼리에서 활성 사용자 만 반환합니다.

class CustomUserManager(UserManager): 

    def get_query_set(self): 
     return super(CustomUserManager, self).get_query_set(). 
      filter(is_active=True) 

User.objects = CustomUserManager() 
User.objects_all = UserManager() 

을하지만 :

나는 다음과 같이 사용자 모델에 사용자 지정 관리자와 원숭이 패치를 정의하는 시도 - 지금이 나중에 재 방문 할 표시됩니다,하지만 난 더 이상 갈 전에
AttributeError: 'NoneType' object has no attribute '_meta'

, 나는이 같은 원숭이 패치는 유지 보수 측면에서 아주 나쁜 형태 것을 알고 있다고 말하고 싶은 것 우리는 빠른 해결책이 필요합니다.

File "<console>", line 1, in <module> 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/manager.py", line 131, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/query.py", line 358, in get 
    clone = self.filter(*args, **kwargs) 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/query.py", line 621, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/query.py", line 639, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1250, in add_q 
    can_reuse=used_aliases, force_having=force_having) 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1114, in add_filter 
    opts = self.get_meta() 
    File "/Users/zarathustra/Virtual_Envs/fierce-spring-7383/venv/lib/python2.7/site-packages/django/db/models/sql/query.py", line 233, in get_meta 
    return self.model._meta 
AttributeError: 'NoneType' object has no attribute '_meta' 

답변

1

필터를 사용자 모델에 적용해야합니까? 대신에이 모델을 서브 클래스 화하려고 시도해 보시고,이 모델을위한 매니저를 코딩하십시오.

class CustomUserManager(UserManager): 

    def get_query_set(self): 
     return super(CustomUserManager, self).get_query_set(). 
      filter(is_active=True) 


class MyUser(User): 
    objects = CustomUserManager() 

# get an active user which username is 'foo' 
MyUser.objects.get(username='foo') 

또는이 확실히 그것을 할 수있는 더 좋은 방법입니다 proxy model

+0

를 사용합니다. 우리는 마감 기한을 넘기 때문에 모든 사용자 관련 코드에 사용하는 모델을 변경하여 버그를 도입하고 싶지 않았기 때문에 다른 솔루션을 사용했습니다. 하지만 다른 사람들이 내 배에 있다면, 대신 이걸 사용하는 것이 좋습니다. –

0

this post에서 답을 찾았 사람이 그뿐만 아니라 원하는 경우

여기, 전체 스택 추적입니다. 그의 질문은 구체적이고 내 것은 일반적이기 때문에 나는 그것들을 중복으로 생각하지 않는다. 그러나 그의 질문에 대한 대답은 나의 대답이다.

관련 문제