2011-03-27 4 views
3

사용자와의 연관성이 많은 모델 앱이 있습니다. 여기에 코드가 있습니다.django : 특정 속성이있는 manytomany 객체를 선택하는 최적의 방법

class app(models.Model): 
    users = models.ManyToManyField(UserProfile) 

이제 특정 'id'가있는 장고 사용자가이 앱의 사용자 목록에서 종료되는지 확인하고 싶습니다. 몇 번의 안타와 시련 끝에 해결책을 찾았습니다.

def user_exists(self,user_obj): 
    userset = self.app.users.all() 
    for userprof in userset: 
     if userprof.user == user_obj: 
      return True 
    return False 

어떻게 개선 할 수 있습니까?

답변

3

매우 비효율적입니다. 모든 관련 사용자를 가져 와서 반복합니다.

ManyToManyField는 쿼리 세트를 반환합니다. 그래서 당신은 하나의 명령으로 모든 것을 할 정상의 검색어 필터링 방법을 사용할 수 있습니다

return self.app.users.filter(user=user_obj).exists() 

참고이 오히려 실제 객체를 평가하는 것보다, 데이터베이스에서 직접 부울을 반환 exists() 방법을 사용합니다.

+0

아야! 그건 꽤 간단한 해결책이었습니다. – Neo

관련 문제