최대 1 분 소요

[error] Related Field got invalid lookup: icontains

django 에서 admin 페이지에 모델 검색기능을 추가하는 과정에서 발생한 에러이다.

두 모델의 구조는 다음과 같았다.

from django.db import models


class Question(models.Model):
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField()

    def __str__(self):
        return self.subject

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    content = models.TextField()
    create_date = models.DateTimeField()

    def __str__(self):
        return "질문"+str(self.id)+" "+str(self.question)+" 의 답변"

Answer 모델의 question 필드가 Question의 subject 를 외래키로 받는다.

그리고 검색 기능을 추가한 admin.py 코드는 다음과 같았다.

from django.contrib import admin
from.models import Question,Answer

class QuestionAdmin(admin.ModelAdmin):
    search_fields = ['subject']

class AnswerAdmin(admin.ModelAdmin):
    search_fields = ['question']

admin.site.register(Question, QuestionAdmin)
admin.site.register(Answer, AnswerAdmin)

Question 모델의 경우 검색이 정상적으로 동작하였지만 Answer 모델은 검색 했을 때

Related Field got invalid lookup: icontains 에러가 발생했다.

원인

원인은 간단했다.

외래키를 사용했을 경우 검색 필드가 값을 가져오기 위해서

Answer 모델의 question 필드 -> Question 모델에서 해당 question 의 subject필드

로 찾아가야 하는데 question 이라고만 값을 주니 길을 잃어버린 것이다.

해결

외래키에 대한 정보를 살짝 알려주면 에러가 해결되고 길을 잘 찾아간다.

class AnswerAdmin(admin.ModelAdmin):
    search_fields = ['question__subject']

필드명 뒤에 연결된 모델의 필드명을 알려주면 해결된다.

에러 해결 완료~!

댓글남기기