2009-10-28 4 views
1

비슷한 프로젝트 모델이 있습니다 :auth.user 당 개체 수를 얻는 방법?

class Project(models.Model): 
    ... 
    lead_analyst=models.ForeignKey(User, related_name='lead_analyst') 
    ... 

사용자 당 프로젝트 수를 가진 모든 사용자를 반환하는 장고 집계를 사용하고 싶습니다. 뭔가 :

models.User.objects.annotate(project_count=Count('project_set')) 

auth.user 내 프로젝트 클래스에 대한 지식이 없기 때문에 그만 작동하지 않습니다. 오류가 발생합니다 :

Cannot resolve keyword 'project_set' into field. Choices are: date_joined, email, employee, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, lead_analyst, logentry, message, password, siteprofile, submitter, user_permissions, username

두 가지 질문, 정말 :

  1. auth.userauth.user

  2. 당 프로젝트 수를 구하는 방법 더 좋은 방법은 내 이 집계를 실행 가능하게 만드는 auth.user 클래스 및 프로젝트 클래스?

아니면 그냥 원시 SQL 원시 집계 (중 하나를 원시 sql을 통해 장고 또는 데이터베이스보기) 침입해야합니까?

답변

4

모델에 문제가 없습니다. 바로 그 관계를 설정하는 방법입니다. 문제는 외래에 related_name을 지정했기 때문에 사용자가 염려하는 한 project_set은 없습니다. 대신 lead_analyst이 있습니다. 실제로 오류 메시지에서 제공하는 필드 목록에서이를 볼 수 있습니다.

그래서 집계 쿼리 읽어야합니다

models.User.objects.annotate(project_count=Count('lead_analyst')) 

(내가 말을해야, 난 당신이 여기에 오해의 소지가 관련 이름을 선택했다고 생각 - 당신은 기본을 고수 더 나을 것입니다 경우 원본을의 구문은 효과가 있었을 것입니다.)

+0

글쎄, 난 바보 같은 자식이야 ...-) related_name의 이유는 해당 모델에서 User와 관련된 필드가 두 개 이상 있다는 것입니다. 나는 그저 위의 발췌 문장에 모두 표시하지 않았습니다. 도움 주셔서 감사합니다. – cethegeek