У меня есть следующие модели 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
таблице, у меня возникает следующая ошибка:
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
источник
источник
Это должно (надеюсь) упростить ответ.
Не выполняйте фильтрацию по самому полю ForeignKey !
Изменить это
в (обратите внимание на ДВА подчеркивания)
name
представляет имя поля из таблицы, с которой у нас есть отношения ForeinKey.Надеюсь это поможет
источник
search_fields = ['foreinkeyfield__foreinkeyfield__name']
он тоже работает. спасибоУбедитесь, что вы не добавляете Foreignkey или ManyToManyField напрямую в search_field.
Вместо этого используйте соглашение Django о двойном подчеркивании. документы
источник
Требуется двойное подчеркивание
источник
Это сработало для меня.
Найдите поле внешнего ключа, используя my_related_object__first_attribute:
источник
Эта ошибка чаще всего возникает при попытке выполнить фильтрацию с помощью ForeignKey. Думаю ошибка в search_filelds. Проверь это. search_fields = ['traduttore__nome "," linguaDa "," linguaA "]. Проблема в этих двух ForeignKey (" linguaDa "," linguaA "). Удалите их. Я думаю, это поможет.
источник
Возможно, это не ответ на исходный вопрос, но время от времени я сталкиваюсь с похожими
invalid lookup
ошибкой, потому что случайно использовал_set
в поиске, например,<model_name>_set
вместо просто<model_name>
.Обычно я путаю related_query_name с default_related_name , которое включает
_set
(также см. Документы по запросам и связанные с ними документы менеджера ).От справочной документации :
(мой акцент)
Сбивает с толку то, что значение по умолчанию
related_name
(т.е.<model_name>_set
) не совпадает со значением по умолчаниюrelated_query_name
(т.е.<model_name>
), но если вы установите пользовательскийrelated_name
(илиdefault_related_name
черезMeta
параметры модели ), он также будет использоваться по умолчаниюrelated_query_name
(как указано в документации).источник
добавить в admin.py
см. ссылку https://docs.djangoproject.com/en/dev/intro/tutorial02/
источник