2013-05-16 1 views
1

내 (간체) 모델은 다음과 같습니다 django 효율적인 방법으로 두 개의 쿼리를 결합하거나 하나의 복합체를 만들 수 있습니까?

class Story(models.Model): 
    wikiedit = models.BooleanField(default=False) 
    writers = models.ManyToManyField(User,null=True,blank=True) 
class Writer(models.Model): 
    user = models.OneToOneField(User) 

지금 내가 만나는 모든 이야기를 포함하는 검색어 세트를 구축을 위해 노력하고있다 :

: wikiedit = True or user in writers

그래서 내보기 안에 내가 두 개의 쿼리를 만들

wikistories = Story.objects.filter(wikiedit=True) 
writerstories = request.user.objects.story_set.filter 

하지만 가능하면이 데이터베이스를 한 번만 치면됩니다. 나는 그것이 더 효율적 일 것 같아요.

Story.objects.filter(writers__contains=request.user) #but this is a TypeError 

어쩌면이 개 검색어 세트를 만들어 다음 목록에 가입 할 단지 더 효율적이지만 하나에 그것을 가지고 싶어요 : 나는 운영자의는 의미에서이 M2M 관계에서 지원되는 경우 찾을 수 없습니다.

실마리가 있습니까? 고마워!

Story.objects.filter(writers=request.user) 

을 그리고 당신은 or 쿼리를 할 Q 개체를 사용할 수 있습니다 :

답변

2

는 M2M 관계를 확인하려면, 당신은 단지 =하지 contains

Story.objects.filter(Q(wikiedit=True) | Q(writers=request.user)) 
+0

좋은! 그것은 작동하지만 너무 기본적인 질문 일지 모르지만 나는 몇 시간 동안이 정보를 찾을 수 없었습니다! 추가 판독기에 대한 참고로 여기에는 반복 결과가 포함될 수 있으므로 제외 될 수 있습니다. 'Story.objects.filter (qwriters | qwiki & ~ qwriters)) '여기서 qwriters 및 qwiki는 해당 Q 객체입니다. 감사! – viridis