Django

2010-12-30 16 views
5

में विभिन्न प्रकार के उपयोगकर्ताओं के लिए मॉडलिंग खाते कहें कि आपके पास एक ऐसा एप्लिकेशन है जहां विभिन्न प्रकार के उपयोगकर्ता साइन इन कर सकते हैं: फर्म, वकील और ग्राहक। एक फर्म के कई वकील हैं; एक वकील के कई ग्राहक हैं। एक फर्म उपयोगकर्ता के विचार, निश्चित रूप से, एक वकील उपयोगकर्ता के विचारों से अलग हैं; दोनों ग्राहक उपयोगकर्ता से अलग हैं।Django

आप तीन अलग-अलग उपयोगकर्ताओं को कैसे मॉडल करेंगे? मैं निम्नलिखित दृष्टिकोण में सोच सकते हैं: एक User को ForeignKey साथ

तीन विभिन्न मॉडलों, अपने स्वयं के क्षेत्रों, जैसे के साथ प्रत्येक:

class Firm(models.Model): 
user = models.ForeignKey(User) 
class Lawyer(models.Model): 
user = models.ForeignKey(User) 
specialty = models.CharField(max_length=100) 
class Client(models.Model) 
user = modelsForeignKey(User) 

अब आप बना सकते हैं, उदाहरण के लिए, एक अलग मॉडल के रूप में विचार-विमर्श के दो का उपयोग कर ForeignKeys: Lawyer और Client; आप एक से Consultation के साथ मॉडल Resource बनाकर परामर्श (जैसे दस्तावेज़, या सामान जैसी) में संसाधन भी जोड़ सकते हैं।

यह दृष्टिकोण यह मुश्किल उपयोगकर्ताओं के बीच भेद करने के लिए बनाता है: आप कैसे पता चलेगा कि कोई user एक Firm है, उदाहरण के लिए - आप डेटाबेस कई बार क्वेरी या सामान्य User ऑब्जेक्ट में एक Profile सौंपने होंगे।

तुम भी जोड़ सकते हैं केवल User करने के लिए एक Profile और एक Role में शामिल हैं, और फिर आप विचारों और प्रमाणीकरण user.get_profile().role के आधार पर चैनल।

आप इस समस्या से कैसे निपटेंगे?

उत्तर

5

मैं तुम्हें यहाँ क्या सुझाव है कि क्या करना होगा:

तुम भी उपयोगकर्ता के लिए केवल एक प्रोफाइल जोड़ सकते हैं और एक भूमिका शामिल हो सकते हैं, और फिर आप विचारों और प्रमाणीकरण user.get_profile के आधार पर चैनल() भूमिका। ।

भूमिका के लिए एक विकल्प फ़ील्ड के साथ प्रोफाइल बनाएं। @lawyer_only जैसे कुछ सजावटी बनाएं जो सुनिश्चित करें कि आपके विचार वकील भूमिका उपयोगकर्ताओं द्वारा केवल पहुंच योग्य हैं।

+0

हाँ, मुझे लगता है कि मुझे इसके साथ जाना होगा। धन्यवाद! (सजावटी के बारे में अच्छा विचार) – Escualo

0

तुम भी उपयोगकर्ता मॉडल उपवर्गीकरण (मॉडल विरासत) विचार कर सकते हैं: http://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance

आप उपयोगकर्ता वर्ग के बाद से मल्टी-टेबल विरासत http://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance के विकल्प के साथ जाना होगा एक सार मॉडल नहीं है।

+0

यह वनटोन संबंधों के लिए सिर्फ एक वाक्यविन्यास चीनी है। मुझे स्पष्ट वनटोन पर लाभ नहीं दिख रहा है। –

+0

@ माइक: बिल्कुल नहीं। जब मैं ओओ-सॉफ्टवेयर डिज़ाइन करता हूं, तो मैं ऑब्जेक्ट मॉडल के संदर्भ में अपनी प्राथमिक चिंता के रूप में सोचना पसंद करता हूं (डेटा संग्रहण बाद में आता है)। इसलिए यदि कोई वकील उपयोगकर्ता है, तो मैं अपने कोड में यह "एक" संबंध स्पष्ट कर दूंगा, ताकि उपयोगकर्ता के उदाहरण की अपेक्षा होने पर एक वकील उदाहरण का उपयोग कर सकें। संयोग से, ओआरएम मॉडल विरासत और एक ही तरह से एक ही रचना (एक-से-एक संबंध के रूप में)। उस ने कहा, Django के मॉडल विरासत में कुछ quirks है जो इसे वस्तु विरासत के रूप में बिल्कुल काम नहीं करते हैं। –