2011-09-07 4 views
0

내 데이터 모델은 세 가지 주요 항목으로 구성 나는 많은 사용자가 목적지를 모든 소스를 결합하는 검색어 세트를 (만들려고하고대다 장고에서 "대리"relathionship

class User(models.Model): 
    ... 

class Source(models.Model): 
    user = models.ForeignKey(User, related_name='iuser') 
    country = models.ForeignKey(Country, on_delete=models.DO_NOTHING) 
    description = models.CharField(max_length=100) 

class Destination(models.Model): 
    user = models.ForeignKey(User, related_name='wuser') 
    country = models.ForeignKey(Country) 

을 많은). 그런 식으로 모든 사용자에 대해 가능한 모든 소스/대상 조합이 포함 된 테이블을 갖게됩니다. SQL에서는 세 테이블을 조인하고 각 테이블에서 적절한 정보를 선택합니다.

내 질문에 쿼리를 수행하는 방법입니까? 쿼리 데이터에 액세스하는 방법?

답변

0

django 쿼리는 모델 객체에서 수행되며, 해당 객체는 documented입니다. 쿼리 또는 쿼리 세트는 게으르며 실행시 일반적으로 dict의 목록을 반환합니다. 목록의 각 dict은 value 다음에 [{'user':'albert','country':'US and A :) ','description':'my description'},....]이 오는 field을 포함합니다.

모든 사용자에 대해 가능한 모든 소스, 대상 조합?

는 당신이 얻을 수있는 reverse relation ship를 사용해야합니다 생각이 수행 예 : 내가 User이 뜻 ForeignKey 관계를 가지고있는 모델 SourceDestination의 작은 경우 이름을 사용하고

my_joined_query = User.objects.values('user','source__country','source__description','destination__country') 

통지 세 개의 모든 테이블에 가입하십시오 풍부한 문서를 살펴보십시오.

편집 :

my_innerjoined_query = User.objects.filter(source__isnull=False,destination__isnull=False) 

이것은을 수행해야합니다

이 역의 모델명을 __isnull=False을 사용하여 내부 당신이 간단하게 얻을 수있는 쿼리를 이야기 할 것이다 가입 만들려면 모든 테이블에 대한 내부 조인

그러면 이전에 values을 사용하여 표시 할 항목을 선택할 수 있습니다.

희망이 도움이됩니다. :)

+0

고마워요! 그것은 트릭을합니다. 나는 _values_ function을 완전히 간과했다. 그러나 _values_는 결과에 빈 요소를 추가하는 왼쪽 외부 조인을 생성합니다. 그것들을 필터링하는 것은 쿼리를 더욱 복잡하게 만듭니다. 장고가 내부 결합만으로 같은 일을 할 수 있습니까? – Xyand

+0

'select_related()'를 사용하면 foreignkeys가'null '이 아님을 확인합니다 – Pannu

+0

'select_related()'는 어떤 객체를 사용해야합니까? – Xyand