2010-03-22 20 views
6

मैं डेटाबेस तालिका में सहेजने से पहले डेटा को एन्कोड करना चाहता हूं और डेटाबेस तालिका से इसे पढ़ने के बाद इसे डीकोड करना चाहता हूं। मैं django प्राप्त करने और विधियों को बचाने के लिए ओवरराइड करना चाहता था।मैं django मॉडल में विधि कैसे प्राप्त कर सकता हूं?

कुछ की तरह:

class UserData(models.Model): 
    userid = models.IntegerFields 
    data = models.charField(max_length=25) 

    def save(self, *args, **kwargs): 
     encode_data(self.data) 
     super(UserData, self).save(*args, **kwargs) 

    def get(self, *args, **kwargs): 
     data = super(UserData, self).get(*args, **kwargs) 
     return decode_data(data) 

Django मॉडल विधि बचाने है और मैं इसे ओवरराइड और मैं क्या चाहते हैं ऐसा करने में सक्षम हूँ। लेकिन, ऐसा लगता है कि वे एक विधि प्राप्त नहीं कर सकते हैं जिसे मैं ओवरराइड कर सकता हूं। मैं इसे कैसे प्राप्त कर सकता हूं? मैं चाहता हूँ डेटा UserData.objects.all() या UserData.objects.get() या UserData.objects.filter() या किसी अन्य तरह के उपलब्ध

उत्तर

5

आमतौर पर, आप इसे __init__ ओवरराइड करके करते हैं। लेकिन Django मॉडल पर __init__ के बाद से सभी तरह का मज़ाकिया व्यवसाय करता है, इसे ओवरराइड करने की अनुशंसा नहीं की जाती है। इसके बजाय, post_init संकेत के लिए सुनने और आपकी डिकोडिंग कार्य करें: मिलता है, फिल्टर के रूप में, यह इस तरह से आप के साथ-साथ एक कस्टम क्वेरीसमूह बनाने के लिए आवश्यकता होती है अंत में होगा करने से

def my_decoder(instance, **kwargs): 
    instance.decoded_stuff = decode_this(instance.encoded.stuff) 

models.signals.post_init.connect(my_decoder, UserData) 
+0

अच्छा और सरल, yum –

+0

यह बहुत उपयोगी था, धन्यवाद। Django दस्तावेज संकेत: https://docs.djangoproject.com/en/dev/ref/signals/ –

6

कोशिश पढ़ने डॉक्स तरीकों कस्टम प्रबंधक लिखने के बारे में बुला पर डीकोड किया जा करने के लिए । याद रखें, आप Model पर कॉल नहीं कर रहे हैं, लेकिन Model.objects पर, जो किसी प्रकार का प्रबंधक है। यहां दस्तावेज़ हैं: https://docs.djangoproject.com/en/dev/topics/db/managers/

+1

और एक प्रबंधक पर सभी तरीकों बस के माध्यम से पारित QuerySet पर संबंधित विधियां प्रबंधक की get_query_set विधि द्वारा लौटा दी गई हैं। –

+2

वह पृष्ठ मौजूद नहीं है। – Alagu

+0

स्पष्ट रूप से यह स्थानांतरित किया गया था। https://docs.djangoproject.com/en/1.3/topics/db/managers/ – gruszczy

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