2011-12-02 3 views
1

내 프로젝트에서 http://djangosnippets.org/snippets/562/의 코드를 사용 중입니다. 몇 가지 문제가 있습니다.사용자 정의 체인 가능 쿼리 세트 관리자 생성 문제

내 자신의 ChainableQuerySetManager를 사용하여 관련 객체를 통해 객체를 만들려고하면 재귀 오류가 발생합니다.

ChainableQuerySetManager 소스 :

class ChainableQuerySetManager(models.Manager): 
     def __init__(self, qs_class=models.query.QuerySet): 
      super(ChainableQuerySetManager,self).__init__() 
      self.queryset_class = qs_class 

     def get_query_set(self): 
      return self.queryset_class(self.model) 

     def __getattr__(self, attr, *args): 
      try: 
       return getattr(self.__class__, attr, *args) 
      except AttributeError: 
       return getattr(self.get_query_set(), attr, *args) 

확장 쿼리 세트 :

class ExtendedQuerySet(models.query.QuerySet): 

     def get_or_None(self, *args, **kwargs): 
      result = None 
      try: 
       result = self.get(*args, **kwargs) 
      except ObjectDoesNotExist: 
       pass 
      return result 

그리고 테스트 모델 :

class ExtendedQuerySetTests(TestCase): 
     def setUp(self): 
      self.parent = ParentObject.objects.create() 

     def test_create_someobject_in_parent(self): 
      someobject = self.parent.create_someobject_throw_related() 
:

class ParentObject(models.Model): 
     value = models.IntegerField(default=0) 

     def count_someobjects(self): 
      return self.someobjects.count() 

     def create_someobject_throw_related(self): 
      return self.someobjects.create() 

     def create_someobject(self): 
      return SomeObject.objects.create(parent=self) 

    class SomeObject(models.Model): 
     parent = models.ForeignKey(ParentObject, related_name='someobjects') 
     value = models.IntegerField(default=1) 
     objects = ChainableQuerySetManager(ExtendedQuerySet) 

테스트 케이스의 모습

귀하의 도움에 감사드립니다. 전체 출처는 https://github.com/RANUX/django-simptools

+3

나는 새로운 사용자라는 것을 알고 있습니다. 그러나 첫 번째 질문을 게시하기 전에 살펴보아야 할 가치가 있습니다. 질문에 코드가 붙여 넣어지고 형식이 지정되었음을 사용자가 스스로 알아 차렸을 것입니다. 연결되지 않았습니다. repo에 연결하면 문제가 해결 될 것이고 repo의 코드가 바뀌고 장래 방문자는 질문의 이점을 누릴 수 없습니다. 나는 downvoter 아니지만, 왜 누군가가 실제로 귀하의 질문 downvoted 이해 : ... | - | – mac

+0

도움 주셔서 감사합니다. –

답변

0

최근에 비슷한 문제가 발생했습니다. 조회 관리자에서 self.__class__ChainableQuerySetManager으로 바꾸십시오. 왜 이것이 문제 였는지 정확히 구분하지는 못했지만, 저를 위해 모든 것을 해결했습니다.