मेरे पास आधार Django मॉडल है, और प्रॉक्सी मॉडल जो इसे उप-वर्गीकृत करते हैं। वे सभी तरीकों को ओवरराइड करते हैं। मुझे आधार मॉडल के सभी उदाहरणों पर पुन: प्रयास करने की आवश्यकता है (यानी। for i in BaseModel.objects.all()
), लेकिन आधार वर्ग में घोषित प्लेसहोल्डर विधियों की बजाय उनके संबंधित प्रॉक्सी कक्षाओं के तरीकों को कॉल करने में सक्षम हो।
मैं इस से कैसे संपर्क करूं? मेरे पास वास्तव में एक मॉडल फ़ील्ड है जो निर्धारित कर सकता है कि कौन सा प्रॉक्सी मॉडल प्रत्येक विशेष उदाहरण से मेल खाता है। हो सकता है कि मैं इसका उपयोग कर सकूं और बेस क्लास को सबक्लास में किसी भी तरह से डाला जा सकता हूं? मुझे हानि हो रही है।
संपादित करें: मैंने देखा है यह प्रश्न और कक्षा को लिखकर बदल दिया है self.__class__
। हालांकि, क्या Django के साथ उपयोग करना सुरक्षित है?
उत्तर:
जवाब के लिए 2 № 1proxymodels = {"Foo": FooModel, "Bar": BarModel}
for o in BaseModel.objects.all():
proxymodels[o.type].method_name(o, *args, **kwargs)
प्रॉक्सी मॉडल पर विधियों को बुलाया जाता है (कक्षाएं), बेसमोडेल उदाहरणों को पहले तर्क के रूप में पारित करना और कोई भी अतिरिक्त तर्क जो आप पास करना चाहते हैं। इस तरह तरीकों को कहा जाता है जैसे उन्हें प्रॉक्सी मॉडल के उदाहरण पर बुलाया गया था।
पीएस: स्वयं को फिर से असाइन करना .__ class__ मुझे बहुत हैकिश लगता है।