문제 상황: 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)
성공~