체인 가능한 메소드로 사용자 정의 관리자 클래스를 개발 중입니다. 문제가 생겼어. 필터링 된 쿼리를 무작위로 추출해야합니다. 임의의 레코드를 얻으려면 필터링되고 별개의 레코드가 필요합니다. 그러나 나는 그것을 얻는 방법을 모른다. 반대로 모든 기록이 있습니다. 머지사용자 지정 클래스 관리자의 메서드에서 이전 쿼리에서 반환 된 데이터를 가져 오는 방법은 무엇입니까?
>>> 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
Django에 내장 된 count() 함수를 사용하고 있습니까? https://docs.djangoproject.com/en/dev/ref/models/querysets/ .count()가 표시되지 않습니다. 필터링되거나 필터링되지 않은 항목에 대해 계산하지 않는 이유는 무엇입니까? – octopusgrabbus
집계를 사용하고 django.db.models에서 Count를 가져옵니다. 그래서'randomize()'메쏘드에서 필터링 된 레코드를 어떻게 계산합니까? – I159
필터가 무엇인지 이해하는 데 문제가 있습니다. – octopusgrabbus