2009-01-06 9 views
12

मैं एक Django आवेदन जो एक Offer मॉडल शामिल हैं पर काम कर रहा हूँ। एक Offer उदाहरण में मूल्य निर्धारण की स्थिति और उत्पाद परिभाषा के लिए अंक शामिल हैं। उत्पाद मॉडल वास्तव में एक पदानुक्रम (मैं एक Television मॉडल, एक Camcorder मॉडल, आदि) है। इसलिए मुझे Offer मॉडल को किसी भी उत्पाद को इंगित करने के लिए एक पॉलिमॉर्फिक (या "जेनेरिक") एसोसिएशन होना चाहिए।मैं Django में मॉडल के बीच एक बहुलक संबंध कैसे परिभाषित कर सकता हूं?

अभी के लिए, मैंने पाया है कि यह generic associations in the ContentTypes application का उपयोग करने के लिए है। ऐसा हो सकता है, लेकिन मैं विकल्पों की तलाश में हूं, यदि कोई हो।

आपकी मदद के लिए धन्यवाद।

(उत्तर प्रति एक समाधान करें)

उत्तर

-3

आप model inheritance पर एक नजर है सकते हैं।

+0

मैं स्पष्ट रूप से सहमत हूं, लेकिन क्या आप इसे किसी ऐसे व्यक्ति के लिए वास्तव में उपयोगी बनाने के लिए उत्तर दे सकते हैं जो इसे पूछेगा। इस तरह से मैं इसे +1 कर सकता हूं। – Ivan

+0

धन्यवाद, लेकिन मुझे नहीं लगता कि यह जवाब है। वर्ग ऑफर (models.Model):: क्या मैं जरूरत की तरह कुछ है उत्पाद = models.ForeignKey (उत्पाद) ... कहाँ उत्पाद एक अमूर्त वर्ग है, और वास्तविक संदर्भित वस्तु एक ठोस का एक उदाहरण है उपवर्ग। कोई विचार? – MiniQuark

3

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

+1

हाँ, यह सामान्य विचार है, लेकिन अगर मैं केवल ऐसा करते हैं, तो मैं 2 कमियां हैं: सबसे पहले, मैं बहु-तालिका विरासत उपयोग नहीं कर सकते, दूसरी बात जब मैं एक उत्पाद के लिए एक प्रस्ताव से जाओ, मैं बजाय एक उत्पाद उदाहरण मिल एक कैमकॉर्डर (या अन्य ठोस वर्ग) उदाहरण। – MiniQuark

+1

आप स्वचालित रूप से यदि आप निर्माण के समय पर "बच्चा" ContentType (कैमकॉर्डर) के लिए एक FK की दुकान एक (जैसे) कैमकॉर्डर उदाहरण में एक उत्पाद उदाहरण बदल सकता है। Http://groups.google.com/group/django-users/browse_thread/thread/f4241bc16455f92d/7268c3f7bca6b046?lnk=raot –

+0

पर अधिक चर्चा "क्या मैं एकाधिक-टेबल विरासत का उपयोग नहीं कर सकता" का क्या मतलब है? एकाधिक-टेबल विरासत यह है कि कैसे Django गैर-सार आधार वर्गों से विरासत लागू करता है (रेल के विपरीत, जो सिंगल-टेबल विरासत करता है)। यहां आपके विकल्प विरासत या सामान्य संबंध हैं; कोई अन्य चांदी की बुलेट नहीं है। –

4

CONTENTTYPES सही दृष्टिकोण है। इसका कारण यह है ForignKey केवल तालिका का एक प्रकार को इंगित कर सकते हैं ताकि आप एक मध्यवर्ती मेज के माध्यम से पारित है और विभिन्न प्रकार के आधार पर अपने विभाजन करने की ज़रूरत है।

तो वर्ग पदानुक्रम के लिए मॉडल विरासत, लेकिन विदेशी कुंजी के लिए ContentType।

2

आप Django में ऐसा नहीं कर सकते हैं। या तो generic relations या एक Django ऐप का उपयोग करें जो इस सुविधा को django_polymorphic जैसे जोड़ता है।

1

django-polymorphic पर एक नज़र डालें, यह इस सुविधा को लागू करता है, और आंतरिक रूप से ContentTypes का भी उपयोग करता है।

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