2009-11-30 4 views
1

ManyToMany 필드에 다른 개체가 포함 된 모든 개체를 선택하는 방법을 찾고 싶습니다. 나는 (벗었) 다음 모델django에서 데이터베이스 쿼리 ManyToManyField

class Category(models.Model): 
    pass 

class Picture(models.Model): 
    categories = models.ManyToManyField(Category) 
    visible = models.BooleanField() 

내가 하나 개 이상의 카테고리에있는 모든 사진을 선택하는 함수를 필요가 있습니다

def pics_in_cats(cat_ids=()): 
    pass 

를하지만 가능하면 검색어 세트의 경우를 반환 할 필요가있는 그래서 같은 것을 수행 할 수 있습니다

pics_in_cats((1,2,3)).filter(visible=True) 

그것은 관련된 모든 종류의 객체를로드하고 자신의 picture_set 속성을 병합하여 수행 할 수 있습니다,하지만 그것은 비효율적 인 것 같다. 가능하다면 원시 SQL로 돌아가는 것을 피하고 싶습니다.

답변

3

왜 사용자 정의 함수를 작성하고이 같은 것을 사용하지 미리

감사합니다? (테스트되지 않은)

작동
pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True) 
+0

-하지만 :) 말 '하고있는 모든 종류의 차 키를 1,2,3의 일치'한다는 이유를 잘 모르겠어요? 그리고 filter (categories__name__in = [ 'foo', 'bar'])를 사용하여 foo 또는 bar라는 이름의 카테고리에있는 모든 사진을 가져올 수 있습니까? –

+0

맞습니다. 장고 (Django) 빌드 쿼리에 대한 모든 가능성을 보려면 여기를보십시오 : http://docs.djangoproject.com/en/dev/topics/db/queries/ – schneck

관련 문제