Mam następujące modele w 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"
Będąc w admin.py
posiadam:
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"]
Ale kiedy próbuję wyszukiwać na stronie administratora w ListinoTraduttore
tabeli, pojawia się następujący błąd:
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
user1545895
źródło
źródło
Ma to (miejmy nadzieję) uprościć odpowiedź.
Nie filtruj według samego pola ForeignKey !
Zmień to
do (zauważ DWA podkreślenia)
name
reprezentuje nazwę pola z tabeli, z którą mamy relację ForeinKey.Mam nadzieję że to pomoże
źródło
search_fields = ['foreinkeyfield__foreinkeyfield__name']
to też działa. dziękiUpewnij się, że nie dodajesz żadnego klucza obcego ani ManyToManyField bezpośrednio do pola wyszukiwania.
Zamiast tego użyj konwencji podwójnego podkreślenia Django. dokumenty
źródło
Wymagane podwójne podkreślenie
źródło
To zadziałało dla mnie.
Przeszukaj pole klucza obcego za pomocą my_related_object__first_attribute:
źródło
Ten błąd występuje głównie podczas próby filtrowania za pomocą klucza obcego. Myślę, że błąd jest w search_filelds. Sprawdź to. search_fields = ['traduttore__nome "," linguaDa "," linguaA "]. Problem stanowią dwa klucze ForeignKey (" linguaDa "," linguaA "). Usuń je. Myślę, że to pomaga.
źródło
To może nie odpowiadać na pierwotne pytanie, ale co jakiś czas
invalid lookup
napotykam podobny błąd, ponieważ przypadkowo użyłem go_set
w wyszukiwaniu, np.<model_name>_set
Zamiast po prostu<model_name>
.Zasadniczo mylę related_query_name z default_related_name , które obejmuje
_set
(zobacz także dokumenty zapytań i powiązane dokumenty menedżera ).Z dokumentacji wyszukiwania :
(moje podkreślenie)
Mylące jest to, że wartość domyślna
related_name
(tj.<model_name>_set
) Nie jest tym samym, co domyślnarelated_query_name
(tj.<model_name>
), Ale jeśli ustawisz niestandardowąrelated_name
(lubdefault_related_name
za pomocąMeta
opcji modelu ), będzie ona również używana jako domyślnarelated_query_name
(jak wspomniano w dokumentacji).źródło
dodaj admin.py
zobacz link https://docs.djangoproject.com/en/dev/intro/tutorial02/
źródło