2010-02-15 19 views
5

समस्या डिफ़ॉल्ट उपयोगकर्ता मॉडल में फ़ील्ड को दिए गए कुछ बहुत ही उपयोगी विकल्प नहीं हैं जैसे अद्वितीय = सही ईमेल फ़ील्ड में।Django में डिफ़ॉल्ट उपयोगकर्ता मॉडल फ़ील्ड को ओवरराइड कैसे करें?

मैंने यह प्रश्न पढ़ा: Override default User model method, और Proxy Model अवधारणा की जांच की, लेकिन इसका कोई प्रभाव नहीं पड़ा।

पहले तो मैंने कोशिश की:

from django.contrib.auth import models 
class User(models.User): 
    class Meta: 
     proxy = True 
    email = EmailField('e-mail address', unique=True, blank=False) 

जो के परिणामस्वरूप:

django.core.exceptions.FieldError: Proxy model 'User' contains model fields. 

इसलिए अगले था:

from django.contrib.auth import models 
class User(models.User): 
    class Meta: 
     proxy = True 
    models.User.email = EmailField('e-mail address', unique=True, blank=False) 

और इस "समाधान" बिल्कुल कोई प्रभाव नहीं है। डिफ़ॉल्ट उपयोगकर्ता मॉडल पहले जैसा व्यवहार कर रहा था।

मुझे केवल गैर-बंदर-पैचिंग-समाधान में रूचि है।

संपादित करें: ठीक है। बंदर-पैचिंग मेरे लिए स्वीकार्य है, लेकिन यह उचित तरीके से कैसे बनाते हैं? (मैं फ़ाइल कि /usr/pyshared/python2.6/... में निहित है बदल रहा है मतलब नहीं)

+0

आह, चलो ... बंदर व्यवसाय का बस * थोड़ा * थोड़ा? :-) दुर्भाग्य से मुझे नहीं लगता कि आप जो वास्तव में चाहते हैं उसे ढूंढने जा रहे हैं। * हर कोई * उपयोगकर्ता मॉडल को एक तरफ या दूसरे तरीके से ट्विक करना चाहता है, लेकिन आपने पाया है कि Django डेटाबेस "कक्षाएं" * पायथन कक्षाएं नहीं हैं, खासकर माता-पिता में ओवरराइडिंग फ़ील्ड के संबंध में। http://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not- निर्धारित –

+0

बंदर पैचिंग पर्याप्त होगी यदि भाषा स्वयं आंतरिक रूप से इसका समर्थन करती है ;-) जैसे रूबी में कक्षाएं खुली हैं, इसलिए आप रनटाइम पर कक्षाओं के कार्यान्वयन को भी बदल सकते हैं, इस प्रकार उपयोगकर्ता मॉडल को रूबी में अधिकतम 3 लाइनों में बदल दिया जा सकता है। वैसे भी, आपकी प्रतिक्रिया के लिए धन्यवाद। क्या आप जानते हैं कि इस बंदर-पैचिंग को उचित कैसे बनाया जाए? –

उत्तर

3

इस पहले से ही पूछा है ... How to make email field unique in model User from contrib.auth in Django

इसके अलावा अतिरिक्त उपयोगकर्ता डेटा की Django विधि यहाँ है http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles

मैं पूरी तरह से इस विधि का प्रशंसक नहीं हूं और आप कहां से आ रहे हैं इसकी सराहना करते हैं, लेकिन कभी-कभी आपको झुंड के साथ जाना पड़ता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। सबसे पहले मैं उपयोगकर्ता मॉडल में जोड़ने के लिए एक रास्ता खोज रहा हूं न केवल ईमेल फ़ील्ड विशिष्टता सत्यापन। अपने फॉर्म को लिखने का समाधान जो ईमेल की विशिष्टता की जांच करता है वह है कि मैं बचाना चाहता हूं (पहला लिंक)। क्यूं कर? मुझे लगता है कि बेहतर तरीका सत्यापन को गहरा जोड़ना है। दूसरी ओर, मैं UserProfile मॉडल में ईमेल फ़ील्ड जोड़ सकता हूं, लेकिन डीबी में यह युगल जानकारी। * श्वास * लेकिन मुझे लगता है कि मैं फॉर्म सत्यापन विधि चिपकाऊंगा। –

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