2010-05-12 19 views
7

django में साइट मॉडल को विस्तारित करने का सबसे अच्छा तरीका क्या है? साइट का नया मॉडल बनाना और विदेशीकी साइट बनाना या कोई अन्य दृष्टिकोण जो मुझे साइट मॉडल को उप-वर्ग करने की अनुमति देता है?आप django में साइट मॉडल का विस्तार कैसे करते हैं?

मैं सबक्लासिंग पसंद करता हूं, क्योंकि संबंध में मैं अधिक आरामदायक हूं, लेकिन मैं अंतर्निहित व्यवस्थापक के साथ होने वाले प्रभाव के लिए चिंतित हूं।

उत्तर

8

मैंने अभी साइट के अपने उप-वर्ग का उपयोग किया और इसके लिए एक कस्टम व्यवस्थापक बनाया।

असल में, जब आप डीजेंगो में एक मॉडल को उपclass करते हैं तो यह मूल मॉडल पर एफके पॉइंटिंग बनाता है और पैरेंट मॉडल के फ़ील्ड को पारदर्शी रूप से एक्सेस करने की अनुमति देता है- वैसे ही आप पेहॉन में पैरेंट क्लास विशेषताओं तक पहुंच सकते हैं। व्यवस्थापक में निर्मित किसी भी तरह से पीड़ित नहीं होगा, लेकिन आपको साइट्स मॉडल एडमिन को अन-रजिस्टर करना होगा और अपना खुद का मॉडलएडमिन पंजीकृत करना होगा।

+2

इन चीजों के बारे में क्या? क्या वे अभी भी काम करते हैं? http://docs.djangoproject.com/en/dev/ref/contrib/sites/#how-django-uses-the-sites-framework –

4

यदि आप केवल ऑब्जेक्ट का व्यवहार बदलना चाहते हैं, लेकिन कोई नया फ़ील्ड नहीं जोड़ना चाहते हैं, तो आपको "प्रॉक्सी मॉडल" (Django 1.1 में नया) का उपयोग करने पर विचार करना चाहिए। आप मौजूदा मॉडलों के लिए अतिरिक्त पायथन विधियां जोड़ सकते हैं, और अधिक:

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

the documentation में और पढ़ें।

+0

मैं नया फ़ील्ड जोड़ना चाहता हूं; लेकिन जानकारी के लिए धन्यवाद। परवाह किए बिना बहुत उपयोगी। –

1

आपके पास SiteProfile जैसे एक और मॉडल हो सकते हैं जिसमें Site के साथ OneToOne संबंध है।

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