2014-01-17 3 views
4
g = Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term)) 

user=request.user을 어떻게 추가 할 수 있습니까?Q 객체의 장고 쿼리 세트

이 작동하지 않습니다

g = Goal.objects.filter(user=request.user, Q(title__contains=term) | Q(desc__contains=term)) 

모델 :

class Goal(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=255) 
    desc = models.TextField() 
+1

먼저 모델을 표시하십시오. – alecxe

+0

@alecxe 업데이트 된 질문 – user3207076

+0

그냥 "this does not work"라고 말하지 마시오. traceback을 포함시켜주십시오. 이 경우, 추적은'SyntaxError : 키워드 arg 다음의 비 키워드 arg '이며, 정확히 무슨 일이 일어나는지 설명합니다. – Alasdair

답변

8

키워드 인수 (user=request.user를) 후 비 키워드 인수 (당신의 Q 개체)를 제공해야합니다.

어느 필터 순서를 전환 :

Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term), user=request.user) 

또는 체인 두 개의 filter() 전화

Goal.objects.filter(user=request.user).filter(Q(title__contains=term) | Q(desc__contains=term)) 
1
g = Goal.objects.filter(Q(user__iexact=request.user) & Q(title__contains=term) | Q(desc__contains=term)) 
파이썬의 장소와 운영자의

사용 &

0

을 장고에 따르면 docs.

조회 함수는 Q 개체와 키워드 인수를 혼합하여 사용할 수 있습니다. 그러나 Q 오브젝트가 제공되면 키워드 인수의 정의 앞에 와야합니다.