2017-11-18 1 views
0

나는 User.objects.values('id', 'username', 'groups__name')Django 사용자 모델 쿼리의 행에 groups__name을 어떻게 얻을 수 있습니까?

에서 라인 groups__name을 얻을 싶어하지만 예를 얻을 :이 예제와 같이 조회 할

{'groups__name': None, 'id': 1, 'username': 'admin'}, 
{'groups__name': 'Manager', 'id': 2, 'username': 'test'}, 
{'groups__name': 'Personal', 'id': 2, 'username': 'test'} 

:

{'id': 1, 'groups__name': None, 'username': 'admin'}, 
{'id': 2, 'groups__name': ('Manager', 'Personal'), 'username': 'test'} 

나는 장고 1.11

+0

첫 줄에 "groups__name"다음에 작은 따옴표가 누락되었습니다. 코드에서도 마찬가지입니까? –

+0

아니요, 제가 잘못 썼습니다. 죄송합니다. 나는 편집 할 것이다. –

+1

단일 쿼리에서 수행 할 수 없습니다. –

답변

0

를 사용하는 당신의 질의는 정확하지만, 그 결과는 하나의 행에있는 모든 관련 이름을 튜플로 가져 오기 위해 파이썬에서 조작해야합니다. itretools.groupby 함수는 반복 가능한 매개 변수가 key 함수 (즉, 그룹과 관련된 항목이없는 추출 된 사용자 개체 항목)로 정렬 될 것으로 예상합니다.

from itertools import groupby 

qs = (User.objects.values('id', 'username', 'groups__name') 
     .order_by('username', 'id', 'groups__name') 
    ) 
qs_list = [] 

for key, gr in groupby(qs, key=lambda x: 
         tuple((k, v) for k, v in x.items() if k != 'groups__name')): 
    groups__name = tuple(x['groups__name'] for x in gr if x['groups__name'] is not None) 
    qs_list.append(dict(key + (('groups__name', groups__name or None),))) 

각주 :
기본 키는 order by에서 중요하지 않습니다,하지만 당신은 모델에 대해 아무것도 기록하지 않았기 때문에 나는 그것을했다. 나는 django.contrib.auth.models 또는 사용자와 그룹간에 ManyToMany 관계가있는 것으로 예상하고 속성은 Group.name.null == False입니다. 그렇지 않으면 누락 된 관련 객체와 null 값을 구별하기 위해 추가 null이 아닌 필드 (예 : pk)를 사용해야합니다.

+0

고맙습니다. 그것은 효과가 있었다. 나는 항상이 아이디어를 사용할 것이다. –

관련 문제