2013-02-23 6 views
5

मैं अपने सभी प्रश्न फ़ील्ड में अपनी क्वेरी खोज की तुलना करने की कोशिश कर रहा हूं, लेकिन मुझे यह नहीं पता कि एक से अधिक फ़ील्ड में इसे कैसे किया जाए।django फ़िल्टर icontains के साथ एक से अधिक फ़ील्ड कैसे प्राप्त करें

यह मेरा कोड है।

expense = Expense.objects.filter(user=request.user.id).order_by('date') 

q = request.GET['q'] 
result = expense.filter(name__icontains=q) 

मैं में जाँच करना चाहते हैं: name, amount, category

अग्रिम

+0

यदि राशि एक पूर्णांक है, तो आप शायद icontains का उपयोग नहीं करना चाहेंगे, लेकिन एक नियमित लुकअप। – Udi

उत्तर

11

Django प्रलेखन से धन्यवाद: - फिल्टर में(), आदि

"कीवर्ड तर्क प्रश्नों - एक साथ "AND" एड हैं। यदि आपको अधिक जटिल प्रश्नों को निष्पादित करने की आवश्यकता है (उदाहरण के लिए, OR कथन के साथ प्रश्न), तो आप क्यू ऑब्जेक्ट्स का उपयोग कर सकते हैं। "

from django.db.models import Q 
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q) 
) 

मुझे आपके मॉडल में राशि और श्रेणी के प्रकार के बारे में निश्चित नहीं है, इसलिए icontains उन पर काम नहीं कर सकते हैं।

this link देखें।

+1

आपको प्राप्त करने के बजाय फ़िल्टर का उपयोग करना चाहिए, क्योंकि केवल एक ऑब्जेक्ट प्राप्त करें। – UnLiMiTeD

+0

@UnLiMiTeD सुधार के लिए धन्यवाद। – jurgenreza

+0

बिल्कुल सही, आपको बहुत धन्यवाद – yaniv14

0

यह जुर्गनेरेज़ा की तरह सही काम करता है।

from django.db.models import Q 
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q) 
) 
संबंधित मुद्दे