तो मैं वेज़होंगतु के उत्तर से कोड का उपयोग कर रहा हूं और इसमें एक स्पष्ट त्रुटि नहीं मिली है। जब हम दोनों को छानने का उपयोग करने के लिए इस कोड के साथ खोज का प्रयास करें और, छानने इस लाइन द्वारा आच्छादित है:
queryset = self.model.objects.filter(eval(query_condition))
यह केवल पिछले परिणामों का उपयोग करने के लिए महत्वपूर्ण है। तो आपको क्वेरीसेट प्राप्त करने के लिए कभी भी self.model.objects
का उपयोग नहीं करना चाहिए, लेकिन केवल क्वेरीसेट को ही फ़िल्टर करें। इस तरह:
def get_search_results(self, request, queryset, search_term):
# search_term is what you input in admin site
# queryset is the list of objects passed to you
# by the previous functions, e. g. filtering
search_term_list = search_term.split(' ') #['apple','bar']
search_columns = ('name','age','address')
# convert to Q(name='apple') | Q(name='bar') | Q(age='apple') | ...
query_condition = ' | '.join(['Q(%s="%s")'%(x,y) for x in search_term_list for y in search_columns])
appended_queryset = queryset.filter(eval(query_condition))
# queryset is search results
queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
queryset |= appended_queryset
return queryset, use_distinct
कृपया विस्तृत करें कि आप वास्तव में क्या व्यवहार करना चाहते हैं। आदर्श रूप से एक उदाहरण प्रदान करते हैं। –
मैंने अभी एक उदाहरण जोड़ा है –
मैंने अपना जवाब अपडेट किया है, आप इसे पढ़ सकते हैं और संपादित कर सकते हैं, फिर कोशिश करें – WeizhongTu