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옵션을 줄때 외래키 값을 사용하고 싶으면
참조하는 외부테이블의 필드값을 확실하게 정해주면 된다.
728x90
'파이썬 python > django' 카테고리의 다른 글
[django] ImageField upload_to 동적 업로드(함수 사용) (0) | 2022.06.25 |
---|---|
[django] debug_toolbar 세팅 (0) | 2022.06.22 |
[django] User모델 커스터마이징 할 때 오류 (0) | 2022.06.14 |
[django] ImageField Form 이미지 업로드하기. (0) | 2022.06.10 |
[django] 프로젝트 배포 시 sqlite3 버전 오류 (0) | 2022.05.02 |