2013-01-02 1 views
0

와 M2M 일치 또는 없음을 확인합니다 'manytomany'객체를 선택하거나 개별 'Bar'객체와 일치하는 적어도 하나 이상의 manytomany 객체를 선택합니다.방법 모두 M2M 필드가 같은 세 번째 모델 가리키는 나는 두 가지 모델이 장고

그래서 내 데이터는 다음과 같습니다

foo1.moos__all = 'boo', 'yah' 
foo2.moos__all = <none> 
foo3.moos__all = 'suck' 

bar1.moos__all = 'boo' 

그런 다음이 검색을 수행 생산할 것 :

bar1.find_matches() 
>>> foo1, foo2 

적어도 하나의 항목 일치를 포함 할 필요가 에 사용되는 데이터 모델을, 그래서 다음과 같이 쉽습니다.

Foo.objects.filter(manytomany__in=bar1.moos.all()) 

이제 모델에 chang ed, Foo.moos는 비워 둘 수 있습니다. 그래서 짧은에,이 작업을 수행해야합니다?

Foo.objects.filter(
    Q(moos__in=bar1.moos.all()) | Q(moos__count=0) 
) 

는 슬프게도 __count가 옵션 :(

어떤 밝은 아이디어가 아니다

답변

0

않음이 작동하지 다음

Foo.objects.filter(
    Q(moos__in=bar1.moos.all()) | Q(moos=None) 
) 
+0

그 그것은 어쨌든이 여분의 필터에 대한 필요성을 무효화하는 데이터 모델 마이그레이션과 관련하여 더 많은 문제점을 지적했으나 알아두면 유용합니다. –