2010-03-02 6 views
7

मुझे django विदेशी कुंजी थोड़ा उलझन में मिल रहा है, क्या एक प्रश्न का उपयोग करके नीचे दिए गए दृश्य को करने का कोई तरीका है?Django - एकल क्वेरी में विदेशी कुंजी ऑब्जेक्ट प्राप्त करें?

# Model 
class Programme(models.Model): 
    name = models.CharField(max_length = 64) 

class Actor(models.Model): 
    programme = models.ForeignKey(Programme) 
    name = models.CharField(max_length = 64) 


# View 
def list_actors(request, programme_id): 
    programme = Programme.objects.filter(id = programme_id)[0] 
    actors = Actor.objects.filter(programme = programme_id) 
    json = simplejson.dumps([{ 
     'name': str(actor.name), 
     'rating': str(actor.rating),} for actor in actors]) 
    return HttpResponse(json, mimetype='application/javascript') 

उत्तर

9

आप Programme क्वेरी और programme को निर्दिष्ट करते हैं, लेकिन आप कहीं भी परिणाम का उपयोग कभी नहीं। बस उस रेखा को हटा दें।

+0

हाँ ने अभी यह देखा ... दोह! जब मैं अधिक समझ सकता हूं तो वापस आने की आवश्यकता है ... –

9

मुझे लगता है कि आप ऐसा ही कुछ करने के लिए देख रहे हैं:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

जो select_related रहे हैं, आप अंतिम से पहले डाल दिया। जैसा कि यहाँ पर बल दिया

actors = Actor.objects.filter(programme = programme_id) 

तरह

actors = Actor.objects.select_related().filter(programme = programme_id) 

दुर्भाग्य से दिखना चाहिए:: get foreign key objects in a single query - Django आप केवल अभिनेताओं के रूप में select_related केवल ForeignKeys और न उपाध्यक्ष होने वस्तुओं पर काम करता है जिस तरह से पुनः प्राप्त करने में सक्षम हो जाएगा कि अपनी लाइन है विपरीत।

+0

'select_related' केवल तभी आवश्यक होगा यदि आप प्रति अभिनेता अतिरिक्त डीबी हिट के बिना' actor.programme.name' तक पहुंचना चाहते हैं। अन्यथा यह अनिवार्य है। – Hamish