django foreignkey model 검색기능 ( icontains )

파오리·2021년 2월 23일
0

아주 작은 기록

목록 보기
4/13

문제 상황: ForeignKey로 연결한 db 필드에서 검색을 하고 싶다.

현재 상황


db구조는 이렇다. Accessor의 name 필드를 Nac의 user에 넣도록 되어있다.


그리고 홈페이지에서는 Nac 기록들이 나오며, 이 기록들에 대하여 검색기능을 사용할 수 있다.

과정

ForeignKey를 사용하지 않는 필드에 대해서는 검색기능을 구현할 때,

...
if q:
    nacList = nacList.filter(Q(time__icontains=search) | Q(user__icontains=search) |  
                                Q(ip__icontains=search) | Q(result__icontains=search) | Q(message__icontains=search))
...

이와 같이 필터링을 할 수 있다.

그러나 ForeignKey를 사용할 경우, Nac의 user필드 -> accessor의 해당 user의 name필드 로 접근해야 하기 때문에 그냥 해서는 에러가 난다.

해결

...
if q:
    nacList = nacList.filter(Q(time__icontains=q) | Q(user__name__icontains=q) |  
                                Q(ip__icontains=q) | Q(result__icontains=q) | Q(message__icontains=q))
...

이렇게 하면 된다.

Q(필드 이름__왜래키필드이름__icontains=q)

성공~

profile
경험 == 배움

0개의 댓글