728x90
위의 Related Field got invalid lookup: icontains 에러는 ForeignKey가 검색 필드에 포함되어 일어나는 에러다.
아래의 예를 통해 살펴보자.
아래의 예제는 세션을 관리하는 모델로, mstusers가 ForeignKey로 MstUser 모델의 사용자 정보를 가져오도록 되어 있다.
models.py
1 2 3 4 5 6 7 8 9 10 | class MstSession(models.Model): sesskey = models.CharField(max_length=64, primary_key=True, null=False, verbose_name="Session") mstusers = models.ForeignKey('MstUser', db_column='usn', null=True) remote_ip = models.CharField(max_length=50, verbose_name="IP") login_dt =models.DateTimeField(verbose_name="접속일시") class Meta: managed = False db_table = 'mst_session' | cs |
하단의 admin.py 파일에서 ForeignKey 를 통해 사용자의 이름 등 사용자 정보를 mstusers를 통해 참조해 보여주고 있으며, 그리고 FK__fieldname, 즉 아래의 예에서는 mstusers__nm 와 같은 방식으로 사용자 이름으로도 검색을 할 수 있게 하였다. 그런데 사용자 이름을 검색창에 넣어서 검색하면 아래와 같은 결과를 나오는데, 그 이유가 바로 FK 인 mstusers 가 검색 필드에 포함되어 있어서이다. 그러므로, mstusers 를 검색필드에서 제거하면 정상적으로 검색 결과를 볼 수 있다.
admin.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class MstSessionAdmin(admin.ModelAdmin): model = MstSession readonly_fields = ('sesskey',) def get_queryset(self, request): qs = super(MstSessionAdmin, self).get_queryset(request) return qs.select_related('mstusers') def user_name(self, obj): return obj.mstusers.nm user_name.short_description = 'Name' fieldsets = [ ('Session', {'fields': ['sesskey']}), (None, {'fields': ['userusn']}), (None, {'fields': ['remote_ip']}), (None, {'fields': ['login_dt']}), ] list_display = ('sesskey', 'user_name', 'remote_ip', 'login_dt') list_filter = ['login_dt'] search_fields = ['mstusers', 'remote_ip', 'mstusers__nm'] ordering = ('-login_dt',) | cs |
728x90
'프로그래밍 Programming' 카테고리의 다른 글
MariaDB 장고 프레임워크 연동 (0) | 2016.03.19 |
---|---|
우분투에 MariaDB 설치하기 Install MariaDB on Ubuntu (0) | 2016.03.19 |
Admin 페이지에서 특정 필드 readonly 로 변경하기 (0) | 2016.03.13 |
except Exception, e : SyntaxError: invalid syntax (0) | 2016.03.13 |
Django Suit configuration 장고 어드민사이트 커스토마이징 (0) | 2016.02.27 |