라이브러리 스타일 검색 양식 (AND, OR, AND NOT 또는 OR NOT과 같은 단어를 연결하여 검색을 추가 할 수있는 새 줄을 추가 할 수 있음)을 작성하여 검색 구문을 작성할 수 있도록했습니다 나는 Q 필터로 바뀌려고 노력했다. 어떤 이유로, 생성하는 필터는 OR이 있으면 모든 것을 반환하는 것처럼 보입니다. ('또는 그 안에'은 사용자가 선택했거나 성명서로 사용되었음을 의미합니다.)Django Q 필터가 예상대로 작동하지 않습니다.
예 : 데이터 필드에 NAME, 데이터 필드에 재료, 데이터 필드에 Steel을 값으로 사용하여 개체를 가져 오도록 Q 필터를 만들려고했습니다. 그것은 작동해야처럼 보인다,
(AND: (OR: (AND:), (AND: ('value__icontains', 'Test'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'Steel'), ('represents__exact', <DataField: 6-Materials>)))))
그 문을 읽고,하지만하지 않습니다 그냥 모든 것을 반환하는 것 같다 내가 만든 질문을 인쇄 할 때
, 이것은 내가 무엇을 얻을 수 있습니다.
이
내가 무엇을 정확히 아니지만, 그것은 형태가 어떻게 생겼는지의 예입니다
UPDATE :
: 결과 Q 문이 대신 수 있도록 내 코드를 변경(OR: (AND: ('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>))))
또는 확장 형태 : 아직도
(OR:
(AND:
('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)
),
(NOT
(AND:
('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>)
)
)
)
밖으로 다음 코드 인쇄는 모든 데이터베이스에서 :
filtered = objects.filter(q)
print("Filtered: ", filtered)
두 번째 표현식없이 AND를 사용하면 문제가 발생합니까? –
AND는 2 진 표현식입니다. 따라서 두 개의 표현식이 필요합니다. 정확히 * 장고가 현재 귀하의 케이스에서 코드를 처리하고 있는지 확실하지 않습니다. – karthikr
제가 설명한 문제를 해결했지만 여전히 작동하지 않습니다. (업데이트를위한 제 질문을 참조하십시오) –