2013-11-01 13 views
0

I 다음과 같습니다 장고 모델 (나는 &는 관련이없는 필드를 생략 테이블을 단순화했습니다 내가 테이블/관계 변경할 수 없습니다.)이 있습니다가져 오기 데이터 외래 키

Class Attachment(models.Model): 
    name = models.CharField() 

Class Email(models.Model): 
    subject = models.CharField() 
    from = models.ForeignKey(User) 
    attach = models.ForeignKey(Attachment) 

Class User(models.Model): 
    name = models.CharField() 

필자는이 첨부 파일을 보낸 Users을 모두 찾고 싶습니다. 그래서 먼저 내가 email_set 통해 반복하지 않고 email_set 즉,에 이메일의 from 필드에 나열된 모든 사용자를 가져올 수있는 효율적인 방법 무엇이 첨부 파일을

my_attachment = Attachment.objects.get(name='Picture1.jpg') 
email_set  = my_attachment.email_set.all() 

포함 된 모든 이메일을 가져옵니다.

users = (User 
      .objects 
      .filter(email__attachment__name = 'Picture1.jpg') 
      .distinct() 
     ) 

는 데이터베이스 테이블에 필요한 인덱스를 생성하는 것을 잊지 마십시오 :

답변

1

이 쉽고 효율적인 방법입니다.

+1

User.objects.filter 확실 하시겠습니까? – hellsgate

+0

물론! 고마워요 @hellsgate !! – danihp

+0

Django에서 간단하게 보이고 작동합니다. SQL SELECT 문은 다음과 같습니다. SELECT'user'.'id','user'.name 'FROM'user' INNER JOIN'email' ON ('user'.') id '='email'.user_id') INNER JOIN'첨부'ON ('email'.attach_id' ='첨부'.'id') 어디''첨부'.name' = % Picture1.jpg % – Medorator

관련 문제