Tengo los siguientes modelos en 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"
Mientras que en el admin.py
tengo lo siguiente:
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"]
Pero cuando intento realizar una búsqueda en la página de administración de la ListinoTraduttore
tabla, aparece el siguiente error:
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']
exception
django-admin
usuario1545895
fuente
fuente
Esto es para (con suerte) simplificar la respuesta.
¡No filtre en un campo ForeignKey en sí !
Cambia esto
a (observe DOS guiones bajos)
name
representa el nombre de campo de la tabla con la que tenemos una relación ForeinKey.Espero que esto ayude
fuente
search_fields = ['foreinkeyfield__foreinkeyfield__name']
también funciona. graciasAsegúrese de no agregar ninguna Foreignkey o ManyToManyField a su campo de búsqueda directamente.
En su lugar, utilice la convención de subrayado doble de Django. docs
fuente
Se necesita doble subrayado
fuente
Esto funcionó para mí.
Busque el campo de la clave externa usando my_related_object__first_attribute:
fuente
Este error ocurre principalmente cuando intenta filtrar usando ForeignKey. Creo que el error está en search_filelds. Revisalo. search_fields = ['traduttore__nome "," linguaDa "," linguaA "]. Estas dos ForeignKey (" linguaDa "," linguaA ") son el problema. Elimínelas. Creo que esto ayuda.
fuente
Es posible que esto no responda a la pregunta original, pero, de vez en cuando, me encuentro con un
invalid lookup
error similar porque usé accidentalmente_set
en una búsqueda, por ejemplo, en<model_name>_set
lugar de solo<model_name>
.Básicamente, tiendo a confundir el related_query_name con el default_related_name , que sí incluye
_set
(ver también los documentos de consultas y los documentos del administrador relacionados ).De la documentación de búsquedas :
(mi énfasis)
Confundiendo cosa es que el valor predeterminado
related_name
(es decir<model_name>_set
) no es el mismo que el por defectorelated_query_name
(es decir<model_name>
), pero si se establece una costumbrerelated_name
(odefault_related_name
, a través de modeloMeta
opciones), que va a ser utilizado también como el valor predeterminadorelated_query_name
(como se menciona en los documentos).fuente
agregar admin.py
ver el enlace https://docs.djangoproject.com/en/dev/intro/tutorial02/
fuente