Season 1 아카이브/프로그래밍
                
              Related Field got invalid lookup: icontains
                문장전달자
                 2016. 3. 13. 16:42
              
              
                    
        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