समस्या निवारण "संबंधित फ़ील्ड में अमान्य लुकअप: icontains" है


94

मेरे पास निम्नलिखित मॉडल हैं 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']

जवाबों:


148

क्या आपने search_fields में __fieldnameउन Linguaसंदर्भों को जोड़ने की कोशिश की है ListinoTraduttoreAdmin, जैसे:

class ListinoTraduttoreAdmin(admin.ModelAdmin):        
    list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
    search_fields = ['traduttore__nome", "linguaDa__field1", "linguaA_field2"]

4
यह सिर्फ एक वास्तव में त्रुटिहीन संदेश है। यह मूल रूप से मेरे मामले में समाधान था। संदर्भ के लिए code.djangoproject.com/ticket/2331
seans

5
यह मेरे लिए सही उत्तर था। इस समस्या को तब हल किया जब मैंने किसी FOREIGN KEY पर खोज की। धन्यवाद
cnobile

यह स्वीकृत उत्तर होना चाहिए, जैसा कि @seans ने उल्लेख किया है, यह त्रुटि हर बार तब होती है जब search_fields (django 1.11) पर एक विदेशी कुंजी होती है।
साइरेलॉप

6 साल बाद वह भद्दा त्रुटि संदेश अभी भी है!
rbennell

105

यह (उम्मीद है) जवाब को सरल करता है।

एक विदेशी के मैदान पर ही फिल्टर न करें !


इसे बदलो

search_fields = ['foreinkeyfield']

(नोटिस दो अंडरस्कोर)

search_fields = ['foreinkeyfield__name']

name उस तालिका से फ़ील्ड-नाम का प्रतिनिधित्व करता है जिसके साथ हमारा फ़ोरनकेई संबंध है।

उम्मीद है की यह मदद करेगा


1
यह उत्तर मैं चाहता हूँ, BTW, मैंने कोशिश की: search_fields = ['foreinkeyfield__foreinkeyfield__name']यह भी काम करता है। धन्यवाद
CK

59

सुनिश्चित करें कि आप किसी भी विदेशी या ManyToManyField को सीधे अपने search_field में नहीं जोड़ रहे हैं।

इसके बजाय Django के डबल अंडरस्कोर कन्वेंशन का उपयोग करें। डॉक्स

class ListinoTraduttoreAdmin(admin.ModelAdmin):
    list_display = ("traduttore", "linguaDa", "linguaA", "prezzoParola", "prezzoRiga", "scontoCat", "scontoFuzzy", "scontoRipetizioni")
    search_fields = ['traduttore__nome", "linguaDa__field1", "linguaA__field2"]

13
यह एक महत्वपूर्ण नोट था! इसलिए यदि आप एक विदेशी खोज करना चाहते हैं, तो आपको वहां की विशेषताओं के लिए खोजबीन करनी चाहिए (जैसे my_related_object__first_attribute)।
OBu

2

डबल अंडरस्कोर की जरूरत

class exampleAdmin(admin.ModelAdmin):
 search_field = ('yourforeignkeyname__choosefieldnameinyourforeignkey')

नोट: डबल अंडरस्कोर की जरूरत है
आजमोल

0

इसने मेरे लिए काम किया।

My_related_object__first_attribute का उपयोग करके विदेशी कुंजी का क्षेत्र खोजें:

search_fields = ('author__username', 'title')
from models
author = models.ForeignKey(User, on_delete=models.CASCADE,   related_name='blog_posts2')

0

यह त्रुटि, ज्यादातर तब होती है जब आप किसी फॉरेनके का उपयोग करके फ़िल्टर करने का प्रयास करते हैं। मुझे लगता है कि त्रुटि search_filelds में है। इसे जाँचे। search_fields = ['traduttore__nome "," linguaDa "," linguaA "]। यह दो विदेशी (" लिंगुआडा "," linguaA ") समस्या हैं। उन्हें हटा दें। मुझे लगता है कि यह मदद करता है।


0

यह मूल प्रश्न का उत्तर नहीं दे सकता है, लेकिन, हर बार invalid lookupजब मैं गलती _setसे एक लुकअप में प्रयोग किया जाता है, जैसे कि मैं एक समान त्रुटि में भाग लेता हूं , जैसे <model_name>_setकि सिर्फ इसके बजाय <model_name>

असल में, मैं default_related_name के साथ संबंधित_क्वेरी_नाम को भ्रमित करने की प्रवृत्ति रखता हूं , जिसमें शामिल हैं ( क्वेरी डॉक्स और संबंधित प्रबंधक डॉक्स भी देखें )।_set

से लुकअप प्रलेखन :

यह पीछे की ओर भी काम करता है। जबकि इसे कस्टमाइज़ किया जा सकता है, डिफ़ॉल्ट रूप से आप मॉडल के निचले नाम का उपयोग करके लुकअप में "रिवर्स" रिलेशनशिप का उल्लेख करते हैं ।

(मेरा जोर)

बात भ्रामक है कि डिफ़ॉल्ट related_name (यानी <model_name>_set) के समान नहीं है डिफ़ॉल्ट related_query_name (यानी <model_name>), लेकिन यदि आप एक सेट कस्टम related_name (या default_related_nameमॉडल के माध्यम से, Metaविकल्प), कि होगा भी डिफ़ॉल्ट के रूप में इस्तेमाल किया जा related_query_name(के रूप में डॉक्स में उल्लेख किया है)।


-2

admin.py में जोड़ें

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

लिंक देखें https://docs.djangoproject.com/en/dev/intro/tutorial02/


हाय, मैंने इसे किया लेकिन कुछ भी नहीं बदला। मेरी भी यही त्रुटि है। आपके पास कोई और सुझाव है?
user1545895

यह काम नहीं करता। हमें विदेशी कुंजी क्षेत्र तक पहुँचने की आवश्यकता है। जिसे निम्न प्रकार से देखा जा सकता है। `[Foreignfield__name]`
लाबान कायरता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.