Saya memiliki model berikut di 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"
Sedangkan di admin.py
I memiliki yang berikut:
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"]
Tetapi ketika saya mencoba melakukan pencarian di halaman admin di ListinoTraduttore
tabel saya mengalami kesalahan berikut:
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
pengguna1545895
sumber
sumber
Ini untuk (semoga) menyederhanakan jawabannya.
Jangan memfilter bidang ForeignKey itu sendiri !
Ubah ini
ke (perhatikan DUA garis bawah)
name
mewakili nama bidang dari tabel yang memiliki hubungan ForeinKey dengannya.Semoga ini membantu
sumber
search_fields = ['foreinkeyfield__foreinkeyfield__name']
:, berhasil juga. terima kasihPastikan Anda tidak menambahkan Foreignkey atau ManyToManyField ke search_field Anda secara langsung.
Gunakan konvensi garis bawah ganda Django sebagai gantinya. dokumen
sumber
Perlu garis bawah ganda
sumber
Ini berhasil untuk saya.
Cari bidang kunci asing menggunakan my_related_object__first_attribute:
sumber
Kesalahan ini, sebagian besar terjadi saat Anda mencoba memfilter menggunakan ForeignKey. Saya pikir kesalahannya ada di search_filelds. Periksa. search_fields = ['traduttore__nome "," linguaDa "," linguaA "]. Dua ForeignKey (" linguaDa "," linguaA ") ini adalah masalahnya. Singkirkan. Saya rasa ini membantu.
sumber
Ini mungkin tidak menjawab pertanyaan awal, tetapi, sering kali saya mengalami
invalid lookup
kesalahan serupa karena saya tidak sengaja menggunakan_set
pencarian, misalnya,<model_name>_set
bukan hanya<model_name>
.Pada dasarnya, saya cenderung mengacaukan related_query_name dengan default_related_name , yang memang termasuk
_set
(lihat juga dokumen kueri dan dokumen manajer terkait ).Dari dokumentasi pencarian :
(penekanan saya)
Membingungkan hal adalah bahwa standar
related_name
(yaitu<model_name>_set
) tidak sama dengan standarrelated_query_name
(yaitu<model_name>
), tetapi jika Anda menetapkan kustomrelated_name
(ataudefault_related_name
, melalui ModelMeta
pilihan), yang akan juga digunakan sebagai defaultrelated_query_name
(seperti yang disebutkan dalam dokumen).sumber
tambahkan admin.py
lihat tautan https://docs.djangoproject.com/en/dev/intro/tutorial02/
sumber