Django का ForeignRelatedObjectsDescriptor.create_manager(...)
फ़ंक्शन गतिशील रूप से RelatedManager
कक्षाएं बनाता है और बाद में गतिशील रूप से बनाए गए वर्ग का एक उदाहरण प्रारंभ करता है।Django के संबंधित प्रबंधक विधियों को ओवरराइड करना
यदि मैं RelatedManager.add(...)
विधि को ओवरराइड करना चाहता हूं, तो मैं इसे कैसे करूँगा?
RelatedManager
कक्षाएं फ़ाइल में बनाई गई हैं: django/db/models/fields/related.py
।
कैसे मैं एक कस्टम RelatedManager
है उपयोग करना चाहते हैं का एक उदाहरण ...
class Record(Model):
string = CharField()
class Managed(Model):
record = ForeignKey('Record')
boolean = BooleanField()
def view_function(...):
record = Record(string='Example')
record.save()
record.managed_set.add(Managed(boolean=True)) # How to override add()?
कोई सुझाव की सराहना की जाएगी।
आदमी, आप इन भागों के चारों ओर मेरे django गुरु हैं, आप सब कुछ जानते हैं –
यह काम नहीं करता है। एक कस्टम प्रबंधक बनाना जो use_for_related_fields = True सेट करता है यह सुनिश्चित करता है कि संबंधित प्रबंधक का सुपरक्लास कस्टम प्रबंधक है। हालांकि, संबंधित प्रबंधक वर्ग को मेरे प्रश्न में निर्दिष्ट फ़ाइल में गतिशील रूप से परिभाषित किया गया है और कस्टम प्रबंधक में कोई भी add() संबंधित प्रबंधक की गतिशील परिभाषा द्वारा ओवरराइड किया गया है। मैं संबंधित मैनेजर के ऐड() को संशोधित कर सकता हूं और कस्टम प्रबंधक के भीतर self.pre_save() और self.post_save() हुक को लागू करने के लिए जोड़ सकता हूं और फिर Django को पैच सबमिट कर सकता हूं, लेकिन मुझे आश्चर्य है कि कोई बेहतर तरीका है या नहीं के बारे में पता। – brildum
-1 क्योंकि यह काम नहीं करता है, उस चर में '_related_' इतिहास का केवल टुकड़ा है और संबंधित क्षेत्रों के प्रबंधकों के साथ कुछ लेना देना नहीं है। – Evgeny