2010-01-25 4 views
1
class SupercalifragilisticexpialidociousManager(models.Manager): 
    # Sorry, I'm sick of Foo and Spam for now. 
    def get_query_set(self, account=None): 
     return super(SupercalifragilisticexpialidociousManager, 
        self).get_query_set().filter(uncle=model_thats_using_this_manager_instance.uncle) 

내가 찾고있는 마법은 "uncle = model_thats_using_this_manager_instance.uncle"입니다. 어떻게 든이 일을 할 수 있어야하는 것 같습니다. 모델을 얻으려면 self.model라고 말할 수 있지만 인스턴스를 얻는 방법은 알고 있습니까?Django : 관리자 내부에서 모델 인스턴스에 어떻게 액세스합니까?

답변

5

관리자를 사용할 때 인스턴스를 요청하는 것은 의미가 없습니다. 당신은 관리자 내부에서 모델을 액세스 할 수 없습니다 내가 아는 한

AttributeError: Manager isn't accessible via Supercalifragilisticexpialidocious instances 
+0

감사 다니엘 :

class Model(models.Model): # some attributes here def getAllRelativesWithSameUncle(self): return Model.objects.filter(uncle = self.uncle) 

또는 관리자의

. 당신은 내가 관리자가 존재하는 상황을 이해하는 데 도움이되었습니다. 나는 여전히이 상황을 더 잘 다룰 수있는 방법을 찾아야 만한다. 애플리케이션 대 전체에 대해 특별한 코드를 작성해야한다. – orokusaki

3

: 당신이, 당신은 명시 적으로 오류가 발생합니다 시도하고 foo이 Supercalifragilisticexpialidocious의 인스턴스 foo.objects.all()을 할 경우 - 관리자 클래스 수준의 속성입니다 . 관리자가 전체 테이블에서 작업 할 때 의미가 없습니다.

당신은 모델과 같이해야합니다 :

class SupercalifragilisticexpialidociousManager(models.Manager): 
    def getSelfRelativesFor(self, model): 
     return self.get_queryset().filter(uncle=model) 
+1

모델 방법이 훨씬 더 의미가 있습니다 –

+0

필터링 속성으로 모델 자체를 사용하는 대신 uncle = model_instance 및 (self, model_instance)라고 말하려고합니다. – orokusaki

+0

물론 그것이 작은 글씨로 쓰여진 이유입니다.) (나는 오해 할 수도 있음을 고백합니다). 그것을 바꿨습니다 .... –

관련 문제