문제

이 질문은 이미 여기에 답이 있습니다.

계산 된 값을 기준으로 정렬하고 싶은 소수의 레코드가 있습니다. 답을 얻었습니다 여기... 좋아요 :

sorted(Profile.objects.all(), key=lambda p: p.reputation)

다음과 같은 프로필 클래스에서 :

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...

불행히도 일반적인보기는 쿼리 세트 객체를 기대하고 목록을 제공하면 오류가 발생합니다.

쿼리 세트를 반환하는 방법이 있습니까?

또는...

어떻게 든 목록을 쿼리 세트로 변환 할 수 있습니까? Django 문서에서 그런 것을 찾을 수 없었습니다.

나는 데이터를 실수하지 않기를 바라고 있지만, 내가해야한다면 그렇게 할 것 같아요.

업데이트 / 답변 :

쿼리 세트를 되 찾는 유일한 방법은 모든 로직을 SQL 쿼리에 가져올 수있는 것입니다.

그것이 불가능한 경우, (나는 생각합니다) 당신은 데이터를 교체해야합니다.

도움이 되었습니까?

해결책

데이터 목록을 쿼리로 다시 변환 할 필요는 없습니다. 쿼리 객체는 데이터를 보유하지 않습니다. 데이터베이스에 대한 쿼리를 나타냅니다. 목록을 쿼리로 만들면 모든 것을 다시 가져와야하며, 이는 중복되고 성능이 좋지 않을 것입니다.

할 수있는 일 :

  • 어떻게 설명하십시오 reputation 필드가 계산됩니다. 어떻게 든 데이터베이스에서 데이터를 주문할 수 있습니다.
  • 쿼리 객체가 필요하지 않도록보기를 수정하십시오. 추가 필터링 등을 수행 해야하는 경우 주문하기 전에 수행해야합니다. 주문은 항목이 적고 데이터베이스에서 데이터가 적을수록 시간이 줄어 듭니다. 따라서 필터링 된 쿼리 객체를 정렬로 보낼 수 있습니다. 템플릿으로 보내기 직전에 기능 (쿼리인지 목록인지 상관하지 않아야합니다.)

다른 팁

좋아 ...이 게시물은 이제 오래되었지만 당신이 할 수있는 일은 모든 것을 얻는 것입니다. ids 목록에있는 객체 중 model.objects.filter(pk__in=list_of_ids)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top