2012-07-15 13 views
5

एक अनुशंसित सेटअप पर, Django में, उपयोगकर्ता प्रोफाइल उदाहरण इसके उपयोगकर्ता उदाहरण के साथ OneToOneField द्वारा जुड़ा हुआ है।Django में उपयोगकर्ता प्रोफाइल के साथ उपयोगकर्ता को पुनर्प्राप्त करने का सबसे प्रभावी तरीका

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    data = ... 

दोनों, उपयोगकर्ता और प्रोफ़ाइल को पुनर्प्राप्त करने के लिए एक दृश्य के अंदर सबसे प्रभावी तरीका क्या है? क्या मैं एक डेटाबेस हिट के साथ दोनों ऑब्जेक्ट्स प्राप्त करने के लिए एक select_related() आंतरिक जॉइन क्वेरी कर सकता हूं? या यह हमेशा दो अलग-अलग कॉल पर आ जाता है? संभवतः, Django के ऑथ मिडलवेयर दृश्य के पहले भी उपयोगकर्ता उदाहरण को पुनर्प्राप्त करता है ... क्या किसी को पता है?

+1

अधिक जानकारी प्रदान करने के लिए। हालांकि, दोनों डेटाबेस डेटाबेस हिट में परिणाम। मेरा सवाल है: क्या हम इसे select_related का उपयोग करके केवल एक आंतरिक क्वेरी में शामिल कर सकते हैं ... और यदि ऐसा है: क्या यह "सामान्य" तरीके से अधिक कुशल है? –

उत्तर

1

उपयोगकर्ता प्रोफ़ाइल get_profile() का उपयोग कर पुनर्प्राप्त किया जा सकता है।

दस्तावेज़ देखें:) request.user.userprofile या request.user.get_profile के माध्यम से प्रोफाइल पुनः प्राप्त किया जा सकता है (: https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

+0

Django कहीं भी उल्लेख करता है, कि get_profile इसके परिणाम कैश करता है, लेकिन यह सभी अनुरोधों के लिए सच है। इसलिए "user.userprofile" की तुलना में मुझे वास्तव में लाभ दिखाई नहीं देता है। लेकिन वास्तव में मुझे क्या परेशान करता है, यह है कि teh उसी टेम्पलेट में, user.get_profile और user.userprofile दोनों का उपयोग करते समय, डेटाबेस दो बार मारा जाता है। तो अब तक, मैं लगातार user.userprofile के साथ चिपक जाता हूं। ऐनवे, प्रोफाइल परिणाम पुनर्प्राप्त करने के दोनों तरीके 2 डेटाबेस हिट में: 1x उपयोगकर्ता + 1x प्रोफ़ाइल। एक select_related कॉल करता है कि एक आंतरिक में शामिल हो। क्या यह संभव और फायदेमंद है? –

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