"관련 필드에 잘못된 조회가 있습니다 : icontains"문제 해결


99

다음 모델이 있습니다 models.py.

class ListinoTraduttore(models.Model):
        traduttore = models.ForeignKey('Traduttore', related_name='Traduttore')
        linguaDa = models.ForeignKey(Lingua, related_name = "linguaDa")
        linguaA = models.ForeignKey(Lingua, related_name = "linguaA")
        prezzoParola = models.CharField(max_length=50, blank=True)
        prezzoRiga = models.CharField(max_length=50, blank=True)
        scontoCat = models.CharField(max_length=50, blank=True)
        scontoFuzzy = models.CharField(max_length=50, blank=True)
        scontoRipetizioni = models.CharField(max_length=50, blank=True)
        class Meta:
                verbose_name_plural = "Listini Traduttori"
        def __unicode__(self):
                return u"%s Da %s A %s Parola=%s Riga=%s ScontoCAT=%s ScontoFuzzy=%s ScontoRipetizioni=%s" % (self.traduttore, self.linguaDa, self.linguaA, self.prezzoParola, self.prezzoRiga, self.scontoCat, self.scontoFuzzy, self.scontoRipetizioni)


class Traduttore(models.Model):
        nome = models.CharField(nomeString, max_length=50)
        cognome = models.CharField(cognomeString, max_length=50)
        nomeAzienda = models.CharField(nomeAziendaString, max_length=50, blank=True)
        codiceFiscale = models.CharField(codiceFiscaleString, max_length=50, blank=True)
        partitaIva = models.CharField(partitaIvaString, max_length=50, blank=True)
        indirizzo = models.CharField(indirizzoString, max_length=50, blank=True)
        telefono = models.CharField(telefonoString, max_length=50, blank=True)
        fax = models.CharField(faxString, max_length=50, blank=True)
        email = models.EmailField(max_length=50, blank=True)
        referente = models.CharField(referenteString, max_length=50, blank=True)
        valuta = models.ForeignKey(Valuta)
        metodoPagamento = models.ForeignKey(MetodoPagamento)
        datiBancari = models.CharField(datiBancariString, max_length=50, blank=True)
        programmiUtilizzati = models.ManyToManyField(Programma, blank=True)
        note = models.CharField(max_length=200, blank=True)
        listino = models.ManyToManyField(ListinoTraduttore, related_name='listino', blank=True)
        def __unicode__(self):
                return u"%s %s %s" % (self.nome, self.cognome, self.nomeAzienda)
        class Meta:
                verbose_name_plural = "Traduttori"

에있는 동안 admin.py다음이 있습니다.

class TraduttoreAdmin(admin.ModelAdmin):
        list_display = ("nome", "cognome", "nomeAzienda")
        search_fields = ["nome", "cognome", "nomeAzienda"]

class ListinoTraduttoreAdmin(admin.ModelAdmin):
        list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
        search_fields = ['traduttore__nome", "linguaDa", "linguaA"]

하지만 ListinoTraduttore표의 관리 페이지에서 검색하려고 하면 다음 오류가 발생합니다.

TypeError at /admin/itrad/listinotraduttore/
Related Field has invalid lookup: icontains
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/itrad/listinotraduttore/?q=Fenicio
Django Version: 1.4.1
Exception Type: TypeError
Exception Value:    
Related Field has invalid lookup: icontains
Exception Location: /Library/Python/2.7/site-packages/django/db/models/fields/related.py in get_prep_lookup, line 142
Python Executable:  /usr/bin/python
Python Version: 2.7.2
Python Path:    
['/Users/nicolac/Documents/DjangoProjects/mysite',
 '/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
 '/Library/Python/2.7/site-packages']

답변:


150

다음 과 같이 search_fields __fieldname에 해당 Lingua참조를 추가해 보셨습니까?ListinoTraduttoreAdmin

class ListinoTraduttoreAdmin(admin.ModelAdmin):        
    list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
    search_fields = ['traduttore__nome", "linguaDa__field1", "linguaA_field2"]

4
정말 도움이되지 않는 오류 메시지 일뿐입니다. 이것은 기본적으로 제 경우의 해결책이었습니다. 참조 code.djangoproject.com/ticket/2331
2013 년

5
이것은 저에게 정답이었습니다. FOREIGN KEY를 검색 할 때이 문제를 해결했습니다. 감사합니다
cnobile

@seans가 언급했듯이이 오류는 search_fields (django 1.11)에 외래 키가있을 때마다 발생합니다.
Cyrlop

6 년이 지난 지금도 그 엉터리 오류 메시지가 남아 있습니다!
rbennell

108

이것은 (희망적으로) 대답을 단순화하는 것입니다.

ForeignKey 필드 자체를 필터링하지 마십시오 !


이것을 변경

search_fields = ['foreinkeyfield']

~ (2 개의 밑줄에주의)

search_fields = ['foreinkeyfield__name']

name ForeinKey 관계가있는 테이블의 필드 이름을 나타냅니다.

도움이 되었기를 바랍니다


1
내가 원하는 대답입니다. BTW, 시도했습니다. search_fields = ['foreinkeyfield__foreinkeyfield__name'], 역시 작동합니다. 감사합니다
CK

59

search_field에 Foreignkey 또는 ManyToManyField를 직접 추가하지 않았는지 확인하십시오.

대신 Django의 이중 밑줄 규칙을 사용하십시오. 문서

class ListinoTraduttoreAdmin(admin.ModelAdmin):
    list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
    search_fields = ['traduttore__nome", "linguaDa__field1", "linguaA__field2"]

13
이것은 중요한 메모였습니다! 따라서 ForeignKey를 검색하려면 거기에서 속성을 명시 적으로 검색해야합니다 (예 : my_related_object__first_attribute).
OBu

3

이중 밑줄 필요

class exampleAdmin(admin.ModelAdmin):
 search_field = ('yourforeignkeyname__choosefieldnameinyourforeignkey')

참고 : 이중 밑줄 필요
Azmol

0

이것은 나를 위해 일했습니다.

my_related_object__first_attribute를 사용하여 외래 키 필드를 검색합니다.

search_fields = ('author__username', 'title')
from models
author = models.ForeignKey(User, on_delete=models.CASCADE,   related_name='blog_posts2')

0

이 오류는 주로 ForeignKey를 사용하여 필터링하려고 할 때 발생합니다. 오류가 search_filelds에 있다고 생각합니다. 확인해 봐. search_fields = [ 'traduttore__nome ","linguaDa ","linguaA "].이 두 ForeignKey ("linguaDa ","linguaA ")가 문제입니다. 제거하십시오. 도움이 될 것 같습니다.


0

이것은 모든 너무 자주 나는 비슷한으로 실행, 원래의 질문에 대답하지만,하지 않을 수 있습니다 invalid lookup실수로 사용했기 때문에 오류 _set조회에서 예, <model_name>_set대신의 <model_name>.

기본적으로, 나는 related_query_namedefault_related_name 을 혼동하는 경향이 있습니다 . 여기에는 _set( 쿼리 문서관련 관리자 문서 도 참조 ) 포함됩니다.

로부터 조회 문서 :

거꾸로도 작동합니다. 사용자 정의 할 수 있지만 기본적으로 모델소문자 이름을 사용하는 조회에서 "역"관계를 참조합니다 .

(내 강조)

일을 혼동하는 것은이다 기본 related_name (즉 <model_name>_set)이 동일하지 않습니다 기본 related_query_name (즉 <model_name>),하지만 당신이 설정 한 경우 사용자 related_name (또는 default_related_name모델을 통해, Meta옵션), 그는 또한 기본으로 사용 related_query_name합니다 (문서에서 언급 한 바와 같이).


-2

admin.py에 추가

admin.site.register(Traduttore, TraduttoreAdmin)
admin.site.register(ListinoTraduttore, ListinoTraduttoreAdmin)

https://docs.djangoproject.com/en/dev/intro/tutorial02/ 링크를 참조하십시오.


안녕하세요, 제가 해냈지만 아무것도 변하지 않았습니다. 나는 같은 오류가 있습니다. 다른 제안이 있습니까?
user1545895

작동하지 않습니다. 액세스해야하는 것은 외래 키 필드입니다. 다음과 같이 조회 할 수 있습니다. `[foreignfield__name]`
Laban funky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.