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


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.