2011-10-25 6 views
6

मैं एक सममित दोस्ती प्रणाली (तुम मेरे दोस्त हैं, इसलिए मैं भी तुम्हारा दोस्त हूँ) को लागू करने के लिए Django में करने के दो तरीके पायाDjango दोस्तों को कई से अधिक फ़ील्ड - क्षेत्र में उपयोगकर्ता या उपयोगकर्ता प्रोफाइल (स्वयं) बेहतर भंडारण?</p> <p>डॉक्स के अंदर सुझाव दिया:

class UserProfile(models.Model): 
    friends = models.ManyToManyField(User, related_name='friends') 

अब, मैं

profiles = UserProfile.objects.filter(user__in=request.user.get_profile().friends.all()).select_related() 

मैं userprofile क्वेरी, क्योंकि वें: 'तो जैसे एक select_related-क्वेरी के साथ सभी' दोस्ताना 'उपयोगकर्ता और userprofile मॉडल पाने के लिए चाहते हैं (है कि एक रिवर्स लुकअप में शामिल हो गए होना चाहिए) वैसे, मैं select_related() का उपयोग कर सकता हूं और सभी संबंधित वस्तुओं को कैश किया जाता है।

दूसरी ओर, मैं तो जैसे मित्र क्षेत्र को संदर्भित करने के लिए "स्व" अपने मॉडल को परिभाषित कर सकते,:

class UserProfile(models.Model): 
    friends = models.ManyToManyField('self') 

अब, मेरी select_related दोस्त देखने कि तरह लग रहा है:

profiles = this_user.get_profile().friends.all().select_related() 

मुझे हमेशा उपयोगकर्ता ऑब्जेक्ट और इसकी संबंधित प्रोफ़ाइल दोनों की आवश्यकता होती है: दूसरा दृष्टिकोण विपरीत_संबंधित() के माध्यम से उल्टा लुकअप से संबंधित है, लेकिन व्यावहारिक रूप से वही है। हालांकि, क्षेत्र संदर्भ के रूप में "स्वयं" का उपयोग करके, Django मेरे लिए सममित दोस्ती संभालती है। इस प्रकार, मुझे मैन्युअल रूप से डेटाबेस में प्रति दो दो प्रविष्टियां बनाने की ज़रूरत नहीं है। Django मेरे लिए यह करता है। सममित विकल्प, हालांकि, केवल "स्वयं" संदर्भ फ़ील्ड पर काम करता है।

बेहतर समाधान कौन सा है? मुझे इसके बारे में कुछ भी नहीं मिला। किसी भी विचार की सराहना की - धन्यवाद!

उत्तर

3

साइमन,

कभी-कभी इसके बजाय पहिया फिर से आविष्कार करने के लिए कोशिश कर रहा से एक मौजूदा प्लगइन का उपयोग करने के लिए, बेहतर है।

क्या आपने django-friends पर एक नज़र डाली है?

+2

हम्म, हाँ, मुझे पता है, धन्यवाद; django-simple-friends ([link] (https://github.com/muhuk/django-simple-friends)), हालांकि यह इस सुविधा को लागू करने के लिए इतना अधिक काम नहीं है और मुझे पता है कि वास्तव में क्या हो रहा है। दोनों पैकेजों का उपयोग करने के तरीकों और दस्तावेजों में काफी व्यापक हैं, उनका उपयोग कैसे करना बहुत पतला है। इसके अलावा दोनों ऐप्स अतिरिक्त मॉडल बनाते हैं - सादगी के पक्ष में, मैं ** ** ** कई से अधिक फ़ील्ड का उपयोग करता हूं और Django को बाकी हिस्सों को संभालने देता हूं। Django-simple-friends के लिए –

+0

+1 –

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