2011-09-19 4 views
1

체인 가능한 메소드로 사용자 정의 관리자 클래스를 개발 중입니다. 문제가 생겼어. 필터링 된 쿼리를 무작위로 추출해야합니다. 임의의 레코드를 얻으려면 필터링되고 별개의 레코드가 필요합니다. 그러나 나는 그것을 얻는 방법을 모른다. 반대로 모든 기록이 있습니다. 머지사용자 지정 클래스 관리자의 메서드에서 이전 쿼리에서 반환 된 데이터를 가져 오는 방법은 무엇입니까?

>>> posts = PostPages.random_objects.filter(image_gallery__isnull=False).distinct() 

>>> posts.randomize() 

또는 그 개수가 현재 쿼리의 레코드 수를 초과하기 때문에 나중에 오류가 발생합니다 :

class RandomQueryset(models.query.QuerySet): 

    def randomize(self):   
     count = self.aggregate(count=Count('id'))['count'] 
     random_index = random.randint(0, count - 1) 
     return self.all()[random_index]  


class RandomManager(models.Manager): 

    def get_query_set(self): 
     return RandomQueryset(self.model, using=self._db) 

    def randomize(self): 
     return self.get_query_set().randomize() 

사용.

IndexError: list index out of range 
+1

Django에 내장 된 count() 함수를 사용하고 있습니까? https://docs.djangoproject.com/en/dev/ref/models/querysets/ .count()가 표시되지 않습니다. 필터링되거나 필터링되지 않은 항목에 대해 계산하지 않는 이유는 무엇입니까? – octopusgrabbus

+0

집계를 사용하고 django.db.models에서 Count를 가져옵니다. 그래서'randomize()'메쏘드에서 필터링 된 레코드를 어떻게 계산합니까? – I159

+0

필터가 무엇인지 이해하는 데 문제가 있습니다. – octopusgrabbus

답변

1

내 질문 중 하나를 대답으로 게시하도록 요청 했으므로 여기를 클릭하십시오. 당신은 내가 당신의 코드에서 사용을 볼 수 없습니다 장고에 내장 된 수() 함수 docs.djangoproject.com/en/dev/ref/models/querysets

를 사용할 필요가 같은

이 보인다.

+0

http://djangosnippets.org/snippets/2550/ 이것은 실행 가능한 버전입니다. – I159

관련 문제