2010-11-07 5 views
6

मान लें कि मैं django-टैगिंग एप्लिकेशन का उपयोग कर रहा हूं और मैं तय करता हूं कि मैं मौजूदा टैगिंग फॉर्म में एक फॉर्म क्लास जोड़ना चाहता हूं। मैं फॉर्म को मौजूदा form.py में पैच नहीं करना चाहता क्योंकि यह अपडेट होने पर उड़ा दिया जाएगा। मैं अपनी फॉर्म क्लास को शामिल करने के लिए form.py का विस्तार कैसे करूं?आप एक django प्लग करने योग्य ऐप कैसे बढ़ाते हैं?

मैंने अपने ऐप में एक "टैगिंग" फ़ोल्डर को form.py के साथ जोड़ने की कोशिश की जिसमें केवल मेरी कक्षा शामिल थी, लेकिन यह इंस्टॉल किए गए ऐप के फॉर्म क्लास को तोड़ देता है। (मुझे पता है कि यह एक लंबा शॉट था, बस सोचा कि मैं इसे आज़मा दूंगा)।

किसी भी आवेदन को किसी मौजूदा एप्लिकेशन में फॉर्म क्लास जोड़ने पर जानकारी देखने के लिए कहां से कोई सुझाव है?

+0

चेकआउट करें [तीसरे पक्ष के डीजेंगो ऐप्स को संशोधित/विस्तारित करें] (http://stackoverflow.com/a/8442736/2698552) – ChillarAnand

उत्तर

2

जैकब कपलान-मॉस, डीजेंगो के मूल डेवलपर, answers your question in the abstract (क्योंकि आपका प्रश्न पहली जगह में सार था), उनकी प्रस्तुति के पेज 185 से 203 पर, "असली दुनिया में Django"।

हालांकि, उस सलाह के लिए आवेदन करने के लिए, प्लग-इन डेवलपर ने अपने ऐप को दिशानिर्देशों के अनुसार लिखा होगा।

+0

जानकारी के लिए धन्यवाद, मैं वास्तव में हैरान हूं कि ऐसा करने का कोई तरीका नहीं है बॉक्स का मुझे लगता है कि मैं स्थापित प्लगिंग ऐप से मॉडलों का उपयोग करने वाले फॉर्म के साथ एक नया एप्लीकेशन तैयार करूंगा। – chris

+1

मुझे कुछ और स्रोत पसंद आएंगे। यह प्रस्तुति 500 ​​क्लिक बहुत लंबी है। 185 स्लाइड करने के लिए – jozxyqk

+0

सीधा लिंक -> http://www.slideshare.net/jacobian/django-in-the-real-world-1750000/185 –

4

सरल उत्तर यह है कि आप फॉर्म कक्षाओं से प्राप्त होते हैं, अपना स्वयं का संशोधन करते हैं, और अपने संशोधित संस्करण का उपयोग करते हैं।

तो, बजाय taggit से आयात की, आप अपने खुद forms.py

से आयात होता है मैं इस में कई बार किया है जब मैं सजाने/एक मौजूदा एप्लिकेशन की कार्यक्षमता बढ़ाने के लिए चाहते हैं। नकारात्मकता यह है कि यदि दस्तावेज खराब है, तो आपको यह पता लगाने के लिए स्रोत कॉल करना होगा कि कॉल स्टैक क्या है और उस कार्यक्षमता के लिए विरासत वृक्ष जिसे आप संशोधित करना चाहते हैं।

इस दृष्टिकोण का नकारात्मक हिस्सा यह है कि आप योगदान किए गए एप्लिकेशन के व्यवहार को संशोधित नहीं कर सकते हैं। इसलिए यदि आप अपने कस्टम कोड का उपयोग करने के लिए टैगगिट की कुछ आंतरिक कार्यक्षमता चाहते हैं - इसे कार्यान्वित करना मुश्किल है। हालांकि, यह एक बहुत ही दुर्लभ मामला है।

क्या आप वास्तव में ऐसा करना चाहते हैं (जैसा कि मुझे एक बार करना था), आप स्रोत को क्लोन कर सकते हैं और अपनी प्रतिलिपि बनाए रख सकते हैं। अपने संशोधनों के साथ एक शाखा बनाएं, और सुनिश्चित करें कि आप अच्छे परीक्षण लिखते हैं।

आपको यह कोड अपने डीजेंगो प्रोजेक्ट में अपने आवेदन के रूप में जोड़ना चाहिए; पाइथन के लुकअप नियमों के कारण - यह आपकी स्थानीय प्रतिलिपि पायेगा और इसे वैश्विक साइट-पैकेज निर्देशिका से किसी के बजाय उपयोग करेगा।

यदि अपस्ट्रीम अपडेट किया गया है, तो आपका बोझ यह सुनिश्चित करके अपनी प्रतिलिपि बनाए रखने के लिए है कि जब आप अपडेट/रीबेस करते हैं तो परीक्षण विफल नहीं होते हैं।

+0

सामान्य स्थिति में स्पष्ट सा एक स्थानीय Django एप्लिकेशन पैदा कर रही है, यानी [ 'startapp'] (https://docs.djangoproject.com/en/dev/intro/tutorial01/), विरासत में आप क्या चाहते हैं और सुविधाओं को जोड़कर, लेकिन मैं विरासत में मिला एक के बजाय आपकी ऐप्लिकेशन कोड का उपयोग करने Django हो रही इकट्ठा पर निर्भर करता है आधार ऐप। क्या आप संभावित तरीकों से विस्तार कर सकते हैं django इसे 'INSTALLED_APPS' में जोड़ने के बाद ऐप का उपयोग कर सकता है, उदाहरण के लिए' urls.py' के माध्यम से, और आप इसके बजाय अपने ऐप में कैसे हुक कर सकते हैं? क्या केवल एक प्रविष्टि बिंदु है और आपको उस बिट को पाने के लिए लाइन के नीचे प्रत्येक कोड को संशोधित करना है जिसे आप बदलना चाहते हैं? – jozxyqk

+0

[django टिप्पणियां] (https://docs.djangoproject.com/en/1।4/ref/contrib/टिप्पणियां/कस्टम /) 'COMMENTS_APP' प्रदान करता है और' __init __। Py' में 'get_model' /' get_form' की अपेक्षा करता है, जो मेरे दृष्टिकोण से django और ऐप के बीच बातचीत को छुपाता है। यदि यह प्रदान नहीं किया गया था तो उदाहरण के लिए मेरे साथ एक फॉर्म को प्रतिस्थापित करने का एक मानक तरीका है? – jozxyqk

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