Exception “故障排除”;相关字段的查找无效:icontains“;

Exception “故障排除”;相关字段的查找无效:icontains“;,exception,django-admin,Exception,Django Admin,我在models.py中有以下型号: class ListinoTraduttore(models.Model): traduttore = models.ForeignKey('Traduttore', related_name='Traduttore') linguaDa = models.ForeignKey(Lingua, related_name = "linguaDa") linguaA = models.Forei

我在
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
表的admin页面中进行搜索时,我出现了以下错误:

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']
外接程序admin.py

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

查看链接

您是否尝试在
列表中的
语言
引用中添加
字段名
,如:

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

改用Django的双下划线约定。
foreinkeyfield\uuu name

确保您没有将任何外键或ManyToManyField直接添加到搜索字段。

class ListinoTraduttoreAdmin(admin.ModelAdmin):
    list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
    search_fields = ['traduttore__nome", "linguaDa__field1", "linguaA__field2"]
这是为了(希望)简化答案

不要过滤外键字段本身


改变这个

search_fields = ['foreinkeyfield']
to(注意两个下划线)

name
表示与我们有ForeinKey关系的表中的字段名

希望这对我有用

使用my_related_object_ufirst_属性搜索外键字段:

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

需要双下划线

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

此错误主要发生在尝试使用ForeignKey进行筛选时。我认为错误在搜索文件中。检查一下。搜索字段=['traduttore_uunome'、“linguaDa”、“linguaA”]。这两个外键(“linguaDa”、“linguaA”)是问题所在。请删除它们。我认为这会有所帮助。

这可能无法回答原始问题,但我经常会遇到类似的
无效查找
错误,因为我在查找中意外使用了
\u set
,例如
\u set

基本上,我倾向于将 ,其中包括
\u set
(另请参见和)

从:

它也可以向后工作。虽然它可以自定义,但默认情况下,您使用模型的小写名称在查找中引用“反向”关系

(我的重点)

令人困惑的是,默认的
相关的\u名称
(即
\u集
)与默认的
相关的\u查询\u名称
(即
)不同,但如果您通过模型
选项设置自定义的
相关的\u名称
(或
默认的\u相关的\u名称
),也将用作默认的相关查询名称(如文档中所述)。

这可能很奇怪

search_fields = ['traduttore__nome']
像这样给予,用单引号将产生错误

search_fields = ["traduttore__nome"]
用双引号表示将解决这个问题

foreignkeyfield__lookupfield  - this is the format

您好,我做了,但没有任何更改。我有相同的错误。您还有其他建议吗?这不起作用。我们需要访问的是外键字段。可以按如下方式查找。`[foreignfield\uu name]`这只是一条毫无帮助的错误消息。这基本上是我的解决方案。作为参考,这是我的正确答案。在我搜索任何外键时修复了此问题。谢谢这应该是公认的答案,正如@seans所提到的,每次搜索字段上有外键时都会发生此错误(django 1.11).6年后,那个糟糕的错误消息仍然存在!这是一个重要的提示!因此,如果你想搜索一个外键,你应该明确地搜索那里的属性(例如,我的相关对象第一个属性)。这是我想要的答案,顺便说一句,我试过:
search\u fields=['foreinkeyfield\uu foreinkeyfield\uu name']
,也可以。谢谢注意:需要双下划线
foreignkeyfield__lookupfield  - this is the format