2012-11-20 5 views
1

내 장고보기에 쿼리 세트가 있습니다.Queryset 내 요소 이동

내가 쿼리 세트의 첫 번째 요소가되도록 항목 중 하나의 위치를 ​​변경하고 싶습니다.

그 방법에 대한 아이디어가 있으십니까?

편집 : 나는이 검색어 세트 안에 내가 가진 것을 알고

qs = UserProfile.objects.filter(myfilter=whatever) 

:

specific_user.userprofile 

내가하고 싶은 것은 user.userprofile을 넣어하는 것입니다

나는 검색어 세트를 이 쿼리 세트를 템플릿의 루프에서 사용하기 때문에 첫 번째 위치에서 내 쿼리 세트로 이동합니다.

{% for i in qs %} 
    <div> i.name </div> 

그리고 목록의 첫 번째 이름이 specific_user의 이름인지 확인하고 싶습니다.

+0

설명해 주시겠습니까? 쿼리, 결과 및 원하는 결과를 표시 할 수 있습니까? – Jingo

+0

물론 편집했습니다. –

답변

5

QuerySet 장고의 개체는 데이터베이스 쿼리의 결과를 추상화 한 것입니다. 일반적으로 말하자면, 쿼리 세트의 특정 오브젝트가 요청 될 때 나중에 실행될 수있는 SQL을 나타내지 만 그럴 때까지는 쿼리가 실행되지 않습니다. 따라서 목록과 같은 쿼리 세트는 실제로 임의로 재정렬 될 수 있다고 생각할 수 없습니다. 쿼리 세트의 객체를 order_by 메소드를 사용하여 정렬하도록 요청할 수 있습니다. 따라서 특정 객체를 먼저 가져 오려면 정렬 할 수있는 객체의 DB 측에 정렬 가능한 속성이 있어야합니다. 이것은 열 또는 F expressions을 사용하여 해당 열에서 계산 된 값이 될 수 있습니다.

그러나 당신은 당신의보기에서의 검색어 목록을 만들 수있는 것처럼, 사용자의 요구에 대한 것 같습니다 :

profiles = [specific_user.userprofile] + [profile for profile in UserProfile.objects.filter(myfilter=whatever).exclude(id=specific_user.userprofile.id)] 

이 템플릿에 원래의 검색어 대신 그 위에 당신의 상황에 그것을 추가하고 반복 .

+0

대단히 감사합니다. 당신의 대답은 매우 분명하고 많은 도움이되었습니다. –