147 votes

Dépannage "Related Field has invalid lookup : icontains" (Champ connexe dont la recherche n'est pas valide)

J'ai les modèles suivants dans 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"

Alors que dans le admin.py J'ai les éléments suivants :

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"]

Mais lorsque j'essaie d'effectuer une recherche dans la page d'administration de l'application ListinoTraduttore tableau J'ai l'erreur suivante :

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']

1voto

Edem Robin Points 19

Cette erreur se produit principalement lorsque vous essayez de filtrer en utilisant un ForeignKey. Je pense que l'erreur se trouve dans le search_filelds. Vérifiez-le. search_fields = ['traduttore__nome", "linguaDa", "linguaA"]. Ces deux ForeignKey ("linguaDa", "linguaA") sont le problème. Supprimez-les. Je pense que cela aide.

1voto

Dennis Points 600

Cela ne répond peut-être pas à la question initiale, mais, de temps en temps, je rencontre un problème similaire. invalid lookup parce que j'ai accidentellement utilisé _set dans une recherche, par exemple <model_name>_set au lieu de simplement <model_name> .

En fait, j'ai tendance à confondre le nom_de_la_recherche_liée avec le nom_de_la_famille_par défaut qui comprend _set (voir aussi documents de requête y Documents relatifs au gestionnaire ).

De la documentation sur les consultations :

Ça marche aussi à l'envers. Bien qu'il soit possible de le personnaliser, par défaut, vous faites référence à une relation "inverse" dans une consultation en utilisant l'attribut nom en minuscules du modèle .

(c'est moi qui souligne)

Ce qui est déroutant, c'est que le par défaut related_name (c'est-à-dire <model_name>_set ) n'est pas le même que le par défaut related_query_name (c'est-à-dire <model_name> ), mais si vous définissez un personnalisé related_name (ou default_related_name via le modèle Meta options), que sera peut également être utilisé comme related_query_name (comme indiqué dans la documentation).

0voto

Sarath Chandran K Points 111

C'est peut-être bizarre

search_fields = ['traduttore__nome']

donner comme ceci, avec des guillemets simples, créera une erreur.

search_fields = ["traduttore__nome"]

donner entre guillemets corrigera le problème

foreignkeyfield__lookupfield  - this is the format

-3voto

Michele Casari Points 11

Ajouter dans admin.py

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

voir le lien https://docs.djangoproject.com/en/dev/intro/tutorial02/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X