2010-06-17 15 views
11

django व्यवस्थापक में आप ModelAdmin के लिए search_fields को वहां दिए गए गुणों को खोजने में सक्षम होने के लिए सेट कर सकते हैं। मेरी मॉडल श्रेणी में ऐसी संपत्ति है जो असली मॉडल प्रॉपर्टी नहीं है, इसका मतलब है कि यह डेटाबेस तालिका में नहीं है। संपत्ति किसी अन्य डेटाबेस तालिका से संबंधित है जो संबंधों के माध्यम से वर्तमान मॉडल से बंधी नहीं है। लेकिन मैं इसे खोजने में सक्षम होना चाहता हूं, इसलिए मुझे खोज क्षेत्र भरने पर व्यवस्थापक साइट फ़िल्टरिंग करने के लिए बनाई गई क्वेरी को किसी भी तरह से अनुकूलित करना है - क्या यह संभव है और यदि, कैसे? मैं अपनी कस्टम प्रॉपर्टी की डेटाबेस तालिका से पूछताछ कर सकता हूं और फिर खोज फिट करने वाले मॉडल वर्गों की आईडी देता है। इसके बाद, जैसा कि मैंने कहा, व्यवस्थापक साइट खोज क्वेरी में प्रवाह करना है।Django adminsite search_fields क्वेरी को अनुकूलित करें

धन्यवाद!

+0

क्या आप शायद दूसरे मॉडल पर परिभाषित एक रिवर्स रिलेशनशिप का मतलब है? –

उत्तर

-2

इस पराक्रम मदद कर सकते हैं

search_fields = [ 'foreign_key__related_fieldname']

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields

+1

ठीक है, जैसा कि मैंने कहा था, मॉडल क्लास दूसरे मॉडल से बंधी नहीं है इसलिए कोई विदेशी कुंजी नहीं है। इसलिए यह काम नहीं करता है। – dArignac

+0

तो संबंध क्या है? – shahjapan

0

आप व्यवस्थापक वर्ग कि admin.ModelAdmin फैली

अधिक पढ़ सकते में search_fields = ['user__email'] तरह search_fields = ['foreign_key__related_fieldname'] का उपयोग करना चाहिए here

+0

यह @ शाहजपन के उत्तर का एक ही मुद्दा पीड़ित है – FSp

11

django 1.6 के बाद से, आप अपने ModelAdmin सबक्लास में get_search_results विधि को परिभाषित करके खोज को कस्टमाइज़ कर सकते हैं।

यह django documentation में अच्छी तरह से समझाया गया है। निम्नलिखित उदाहरण इस दस्तावेज़ से कॉपी किया गया है।

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('name', 'age') 
    search_fields = ('name',) 

    def get_search_results(self, request, queryset, search_term): 
     queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term) 
     try: 
      search_term_as_int = int(search_term) 
      queryset |= self.model.objects.filter(age=search_term_as_int) 
     except: 
      pass 
     return queryset, use_distinct 
संबंधित मुद्दे