2009-12-30 22 views
51

मैं Django में एक तालिका को एक विदेशी कुंजी के किसी विशेष क्षेत्र के मूल्य के आधार पर फ़िल्टर करने की कोशिश कर रहा हूं।Django - विदेशी कुंजी गुणों पर फ़िल्टरिंग

# models.py 
class Asset(models.Model): 
name = models.TextField(max_length=150) 
project = models.ForeignKey('Project') 

class Project(models.Model): 
name = models.TextField(max_length=150) 

मैं फिल्टर करने के लिए मेरी संपत्ति सूची जुड़े परियोजना के नाम के आधार पर चाहते हैं -

उदाहरण के लिए मैं दो मॉडल है।

वर्तमान में मैं प्रदर्शन कर रहा हूँ दो प्रश्नों:

# views.py 
project_list = Project.objects.filter(name__contains="Foo")   
asset_list = Asset.objects.filter(desc__contains=filter, project__in=project_list).order_by('desc') 

अगर वहाँ मुख्य क्वेरी में छानने के इस प्रकार निर्दिष्ट करने के लिए एक रास्ता है मैं सोच रहा हूँ?

उत्तर

71

Asset.objects.filter(project__name__contains="Foo")

+1

धन्यवाद, मुझे लगता है कि कोशिश की थी लेकिन जाहिरा तौर पर मैं डबल अंडरस्कोर उपयोग करने के लिए भूल गया था। –

+0

आवश्यक है ?? – DeadDjangoDjoker

9

यह संभव हो गया के बाद से queryset-refactor शाखा उतरा पूर्व 1.0 गया है। Ticket 4088 समस्या का खुलासा किया। यह काम करना चाहिए:

Asset.objects.filter(
    desc__contains=filter, 
    project__name__contains="Foo").order_by("desc") 

Django Many-to-one documentation इस और मॉडल एपीआई का उपयोग कर विदेशी कुंजी निम्नलिखित के अन्य उदाहरण है।

+0

इस डीबी दो बार हिट करने के लिए जा रहा है, मैं() इस अधिक इष्टतम बनाने के लिए select_related का उपयोग किया जाना चाहिए? –

+4

आप यह देखने के लिए एक .query.as_sql() जोड़ सकते हैं कि वास्तव में SQL को निष्पादित किया जाएगा। – fastmultiplication

+0

Django डॉक्स के लिए लिंक एक '410 पृष्ठ हटा दिया' पर दिनांक और भूमि के बाहर पूरी तरह से है: -/ – szeitlin

संबंधित मुद्दे