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