2010-02-19 10 views
7

इस में:माता-पिता विशेषता के लिए उप-श्रेणी मॉडल पर Django अद्वितीय_एक साथ?

class Administrator(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    account = models.ForeignKey(Account) 

    class Meta: 
     unique_together = (('account', 'self.user.username'),) 

self.user.username हिस्सा जाहिर incorrrect है। हालांकि, इसमें:

class Administrator(User): 
    account = models.ForeignKey(Account) 

    class Meta: 
     unique_together = (('account', 'username'),) 

क्या यह काम करेगा क्योंकि मैं उपयोगकर्ता से विरासत में हूं? (मैं अभी तक इसका परीक्षण नहीं कर सकता क्योंकि कहीं और जगह बहुत सारे तत्व हैं)। क्या मैं इसके बजाय पहले संस्करण का उपयोग 'user.username' के साथ कर सकता हूं? या, क्या मुझे दूसरे संस्करण का उपयोग करना चाहिए?

उत्तर

7

यह

unique_together = (('account', 'user__username'),) 

होगा अगर मैं समझता हूँ कि तुम क्या करने की कोशिश कर रहे हैं क्या होता है। डबल अंडरस्कोर नोट करें। इस तरह आप एक विदेशी कुंजी के ऑब्जेक्ट की गुणों को देखते हैं।

+0

ठीक है, धन्यवाद टॉम। यह पूरी तरह से काम करता है। मैं उपयोगकर्ता को उपclass करने के लिए डर रहा हूँ (पता नहीं इस से सड़क पर क्या प्रभाव आ सकता है), तो मैं इसके बजाय इसका उपयोग करूंगा। – orokusaki

+0

आप उपयोगकर्ता को उपclassing के बारे में चिंतित क्यों होंगे? तुम क्या करने की कोशिश कर रहे हो? यदि आप उपयोगकर्ता मॉडल में अतिरिक्त जानकारी जोड़ने की कोशिश कर रहे हैं, तो django-पंजीकरण (http://bitbucket.org/ubernostrum/django-registration/) देखें। अन्यथा मुझे लगता है कि आप ऑथ सिस्टम (http://docs.djangoproject.com/en/dev/topics/auth/) पर एक नज़र डालना चाहते हैं, जिसमें पहले से ही उपयोगकर्ता और व्यवस्थापक और अन्य सुरक्षा अवधारणाएं हैं। – Tom

+0

I ' मैं एक एसएएएस का निर्माण कर रहा हूं ताकि उपयोगकर्ता मेरे सॉफ़्टवेयर में उच्चतम स्तर का उदाहरण न हों। लेखा करेंगे। इसका अर्थ यह है कि कोई उपयोगकर्ता किसी व्यवस्थापक से खाता धारक के ग्राहक आदि से कुछ भी हो सकता है। प्रत्येक के पास अपनी अनुमति हो सकती है (यानी, एक खाता प्रशासक अपनी खाता सेटिंग्स को संपादित करने में सक्षम होगा (जैसे उनके पेपैल लॉगिन, या उपयोग करने के लिए सीएसएस डालें उनके फॉर्म, आदि के लिए, और खाताधारक का ग्राहक खाता लॉग इन करने और संदेश धारक को संदेश भेजने में सक्षम होगा और खाताधारक उन्हें जवाब देगा (निजी बातचीत))। क्या यह ठीक है, या मैं अभी भी गायब हूं कुछ। – orokusaki

5

मुझे विश्वास नहीं है कि आप जो कर सकते हैं वह कर सकते हैं जो आप django कोर का उपयोग करके करने की कोशिश कर रहे हैं। जैसा कि in this answer to a related question की ओर इशारा किया गया है डीबी परत पर अद्वितीय_ऑथोजेर लागू किया गया है। यदि आप django मॉडल विरासत द्वारा बनाई गई डीबी टेबल का निरीक्षण करते हैं, तो आप देखेंगे कि डीबी को पूरा करने के लिए यह संभव नहीं है।

कुछ वैकल्पिक समाधानों के लिए उस संबंधित प्रश्न पर नज़र डालें।

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