2009-06-24 2 views
1

두 모델이 있습니다 이 모델을 사용하여 설명에 아바타를 표시합니다.Django ORM : 두 모델의 쿼리

django_comments :

user_id 
comment 
..... 

myapp_profile

user_id 
image_path 
...... 

는 사실이 데이터를 얻기 위해) cursor.execute (와 원시 쿼리를 수행 미안

------- ---------- ------- 
'user_id' 'image_path' 'comment' 
------- ---------- ------- 
    3  name.jpg  test 

하지만 원하는 "장고체 방식"으로 수행

어떤 해결책이 있습니까?

감사합니다.

답변

5

다음에 대해 생각해보십시오. 그것은 어느 모델의 인스턴스가 아니겠습니까?

그러나, 새로운 주석()와 F() 기능과 함께, 당신은 같은 것을 해낼 수 있습니다, 물론

Comment.objects.all().annotate(image_path=F('user__profile__image_path')) 

을 당신은 언제나 수 :

Comment.objects.all().select_related() 

x.user.get_profile()에서 image_path를 가져옵니다. image_path

+0

Comment.objects.all() 주석 (IMAGE_PATH는 = F는 ('user__profile__image_path')) 내가 좋은 해결책을 보이지만은 problema이있다 난 장고 1.0을 사용하고 있습니다 - Comment.objects.all(). select_related() 유일한 문제는 내가 하나의 쿼리를하고 싶다는 것입니다. 시간 내 주셔서 감사합니다. –

+0

@ger 선택하신 사항이 확실합니다. 필요한 ORM 기능을 장고 트렁크로 업그레이드하거나, 여러 쿼리를 허용하거나, 그대로 원시 SQL을 사용하십시오. –

+1

이 또한 필요하며 select2related()는 many2many 관계이기 때문에 작동하지 않습니다. 하나의 행으로 올바르게 필터링됩니다.) 위의 작동하지 않습니다 : 'F'개체에 '조회'특성이 없습니다. – miracle2k

1

#14030에 제안 된 기능을 찾고 있는데 다음 작업을 수행 할 것입니다 :

Comment.objects.all().annotate(image_path=F('user__profile__image_path')) 

내가 현재 사용하고 무엇 :.

Comment.objects.all().extra(select={'image_path': 'profiletable.image_path'})