সমস্যার সমাধান "সম্পর্কিত ক্ষেত্রের অবৈধ চেহারা: আইকনটেইনস"


98

আমার কাছে নিম্নলিখিত মডেলগুলি রয়েছে 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']

উত্তর:


150

আপনি কি অনুসন্ধান_ফিল্ডগুলিতে __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
এটি কেবলমাত্র একটি অস্বাস্থ্যকর ত্রুটি বার্তা। এটি মূলত আমার ক্ষেত্রে সমাধান ছিল। রেফারেন্স কোডের
— সান করুন

4
এটি আমার জন্য সঠিক উত্তর ছিল। আমি যখন কোনও বিদেশী কী অনুসন্ধান করেছিলাম তখন এই সমস্যাটি স্থির করেছিলাম। ধন্যবাদ
— সিএনবাইল

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, যেমন @ সিংস উল্লিখিত রয়েছে, ততবার এই ত্রুটিটি অনুসন্ধানের ক্ষেত্রগুলিতে কোনও বিদেশী কী উপস্থিত হওয়ার সময় ঘটে (জাজানো ১.১১)।
— সাইরলপ

Years বছর পরেও সেই ক্র্যাপি ত্রুটি বার্তাটি এখনও আছে!
— rbennell

106

এটি (আশাবাদী) উত্তরটি সহজ করার জন্য।

একটি বিদেশি ক্ষেত্র নিজেই ফিল্টার করবেন না !


এই পরিবর্তন

search_fields = ['foreinkeyfield']

(টিডাব্লুও আন্ডারস্কোর লক্ষ্য করুন)

search_fields = ['foreinkeyfield__name']

name সারণী থেকে ক্ষেত্রের নাম উপস্থাপন করে যা আমাদের সাথে ফোরইনকি সম্পর্ক রয়েছে।

আশাকরি এটা সাহায্য করবে


4
এটি আমি চাই উত্তর, বিটিডাব্লু, আমি চেষ্টা করেছি:, search_fields = ['foreinkeyfield__foreinkeyfield__name']এটি খুব কার্যকর হয়। ধন্যবাদ
— সি কে

59

নিশ্চিত হয়ে নিন যে আপনি সরাসরি আপনার অনুসন্ধান_ফিল্ডে কোনও বিদেশি বা মুনি টোমনিফিল্ড যোগ করছেন না।

পরিবর্তে জাজানো ডাবল আন্ডারস্কোর কনভেনশন ব্যবহার করুন। ডকস

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

13
এটি একটি গুরুত্বপূর্ণ নোট ছিল! সুতরাং আপনি যদি কোনও বিদেশী কী অনুসন্ধান করতে চান তবে আপনার সেখানে বিশিষ্টতার জন্য স্পষ্টতই উপদেশ দেওয়া উচিত (উদাঃ আমার_ সম্পর্কিত_জেক্ট_প্রথম_প্রেম)।
— ওবু

2

ডাবল আন্ডারস্কোর প্রয়োজন

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

দ্রষ্টব্য: ডাবল আন্ডারস্কোর প্রয়োজন
— আজমল

0

এটি আমার পক্ষে কাজ করেছে।

My_related_object__ প্রথম_প্রেমিক ব্যবহার করে বিদেশী কীটির ক্ষেত্র অনুসন্ধান করুন:

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

0

এই ত্রুটিটি বেশিরভাগ ক্ষেত্রে ঘটে যখন আপনি বিদেশী কী ব্যবহার করে ফিল্টার করার চেষ্টা করেন। আমি মনে করি ত্রুটিটি অনুসন্ধান_ফিল্ডগুলিতে রয়েছে। এটি পরীক্ষা করে দেখুন। অনুসন্ধান_ফিল্ডস = ['ট্রেডটোর_নোম "," লিঙ্গুয়াদা "," লিংগুএ "] This


0

এটি আসল প্রশ্নের উত্তর নাও দিতে পারে তবে প্রতিবারই আমি একই ধরণের 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(যেমন দস্তাবেজ উল্লেখ)।


-2

অ্যাডমিন.পিকে যোগ করুন

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

লিঙ্কটি দেখুন https://docs.djangoproject.com/en/dev/intro/tutorial02/


হাই, আমি এটি করেছি কিন্তু কিছুই পরিবর্তন হয়নি। আমারও ত্রুটি আছে। তোমার অন্য কোনো পরামর্শ আছে?
— ব্যবহারকারী 1545895

এটা কাজ করে না. আমাদের যা অ্যাক্সেস করতে হবে তা হ'ল বিদেশী কী ক্ষেত্র। যা নিম্নলিখিত হিসাবে দেখা যেতে পারে। `[বিদেশী ক্ষেত্রের নাম name নাম]`
— লাবনের মজাদার মনকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.