2009-12-30 6 views
51

외래 키의 특정 필드 값을 기반으로 장고에서 테이블을 필터링하려고합니다. 내가 관련 프로젝트의 이름을 기반으로 내 자산 목록을 필터링하고 싶습니다Django - 외래 키 속성 필터링

# models.py 
class Asset(models.Model): 
name = models.TextField(max_length=150) 
project = models.ForeignKey('Project') 

class Project(models.Model): 
name = models.TextField(max_length=150) 

-

예를 들어

나는 두 가지 모델이있다.

현재 내가 수행하고 두 개의 질의 :

# views.py 
project_list = Project.objects.filter(name__contains="Foo")   
asset_list = Asset.objects.filter(desc__contains=filter, project__in=project_list).order_by('desc') 

주 쿼리에서 필터링의 종류를 지정하는 방법이 있는지 궁금 해요?

답변

71

Asset.objects.filter(project__name__contains="Foo")

+1

고마워, 나는 그것을 시도했지만 분명히 이중 밑줄을 사용하는 것을 잊어 버렸습니다. –

+0

은 필수 항목입니까 ?? – DeadDjangoDjoker

9

queryset-refactor 브랜치가 1.0 이전으로 착신 되었기 때문에 가능했습니다. Ticket 4088에 문제가 노출되었습니다. 이 작업을해야합니다 :

Asset.objects.filter(
    desc__contains=filter, 
    project__name__contains="Foo").order_by("desc") 

Django Many-to-one documentation이와 모델 API를 사용하여 외부 키를 다음의 다른 예를 가지고있다.

+0

이 두 번 DB를 칠 예정 내가이 (가)이 더 최적화하기 위해 select_related 사용되어야 하는가? –

+4

.query.as_sql()을 추가하여 실제로 실행될 sql을 확인할 수 있습니다. – fastmultiplication

+0

django 문서에 대한 링크가 완전히 구식이며 '410 페이지가 삭제되었습니다.': - – szeitlin

관련 문제