programing

django-목록을 다시 쿼리 셋으로 변환

copyandpastes 2021. 1. 18. 22:12
반응형

django-목록을 다시 쿼리 셋으로 변환


이 질문에 이미 답변이 있습니다.

계산 된 값을 기준으로 정렬하려는 레코드가 몇 개 있습니다. 여기에이 있습니다 ... 이렇게 :

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

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

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...

불행히도 제네릭 뷰는 queryset 객체를 예상하고 목록을 제공하면 오류가 발생합니다.

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

또는...

어떻게 든 목록을 쿼리 셋으로 변환 할 수 있습니까? 장고 문서에서 그런 것을 찾을 수 없습니다.

나는 데이터를 비정규 화하지 않기를 바라고 있지만, 필요하다면 그렇게 할 것입니다.

업데이트 / 답변 :

쿼리 세트를 다시 얻는 유일한 방법은 모든 논리를 SQL 쿼리로 가져올 수있는 것 같습니다.

그것이 불가능할 때는 (내 생각에) 데이터를 비정규 화해야합니다.


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

할 수있는 일 :

  • reputation필드 계산 방법을 설명하십시오 . 어떻게 든 데이터베이스의 데이터를 주문할 수 있습니다.
  • 조회 오브젝트가 필요하지 않도록보기를 수정하십시오. 추가 필터링 등을 수행해야하는 경우 순서 지정 전에 수행해야합니다. 순서 지정에 더 적은 항목으로 시간이 덜 걸리고 데이터베이스에서 더 적은 데이터를 가져 오므로 필터링 된 쿼리 개체를 정렬에 보낼 수 있습니다. 템플릿으로 보내기 직전에 함수를 사용합니다 (쿼리인지 목록인지 상관하지 않습니다.)

좋아 ...이 게시물은 이제 오래되었지만 ids목록의 모든 개체를 가져온 다음 수행 할 수있는 작업은model.objects.filter(pk__in=list_of_ids)

참조 URL : https://stackoverflow.com/questions/1058135/django-convert-a-list-back-to-a-queryset

반응형