파이썬 python/django

[django] Related Field got invalid lookup: icontains 오류

Aytekin 2022. 6. 17. 14:52
728x90

search_fields 옵션에 원하는 필드들을 넣어서 admin페이지에서 검색 가능하도록 만들려고 하는 중에 "Related Field got invalid lookup: icontains" 이런 오류에 맞딱뜨렸다.

 

 

아래 코드가 admin.py에서 오류가 났었던 코드이다.

models.py를 보면 title, content 필드는 Post테이블 자체필드이지만 username 은 User라는 테이블에서 외래키로 연결시켜놓은 상태이다. 

즉 username필드는 User테이블과 연결시켜주는 고유값일 뿐이다.

따라서 django는 User테이블에서 어떤 필드를 가지고 검색해야 하는지 모르는 것이다.

그래서 에러가 났을 뿐...

# models.py

class Post(BaseModel):
    username = models.ForeignKey('users.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=128, blank=False)
    content = models.TextField()
    image = models.ImageField(blank=True, null=True)
    likes = models.ManyToManyField('users.User', related_name='likes', blank=True)
# admin.py

class PostAdmin(admin.ModelAdmin):
    list_display = ('title','username')
    search_fields = ('title','content','username')

admin.site.register(Post,PostAdmin)

 

그래서 해결하는 방법은

외부 테이블의 어떤 필드값으로 검색할 건지 정해주면 된다.

이때 방법은 언더바 2개(__)를 붙여서 알려주면 된다.

나의 경우엔 username__username이렇게 했는데 앞의 username은 Post테이블의 username이고 언더바 뒤의 username 은 User테이블의 username필드를 가리키는 것이다.

# admin.py

class PostAdmin(admin.ModelAdmin):
    list_display = ('title','username')
    search_fields = ('title','content','username__username')

admin.site.register(Post,PostAdmin)

 

정리하자면 django admin search_fields옵션을 줄때 외래키 값을 사용하고 싶으면

참조하는 외부테이블의 필드값을 확실하게 정해주면 된다.

 

참고 : https://stackoverflow.com/questions/11754877/troubleshooting-related-field-has-invalid-lookup-icontains

728x90