2011-02-06 21 views
22

आप पोस्टग्रेएसक्यूएल बैकएंड के साथ, डीजेगो के ओआरएम का उपयोग करके बाइनरी डेटा का "ब्लॉब" कैसे स्टोर करते हैं? हां, मुझे पता है कि Django उस तरह की चीज़ों पर फहरा हुआ है, और हाँ, मुझे पता है कि वे चाहते हैं कि आप इसके लिए ImageField या FileField का उपयोग करें, लेकिन यह कहने के लिए पर्याप्त है, यह मेरे आवेदन के लिए अव्यवहारिक है।डीजेगो ब्लोब मॉडल फ़ील्ड

मैंने टेक्स्टफिल्ड का उपयोग करके इसे हैकिंग करने का प्रयास किया है, लेकिन मुझे मौलिक त्रुटियां मिलती हैं जब मेरा बाइनरी डेटा मॉडल एन्कोडिंग प्रकार की सख्ती से पुष्टि नहीं करता है, जो डिफ़ॉल्ट रूप से यूनिकोड है। जैसे

psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665 

उत्तर

24

यह टुकड़ा किसी भी अच्छे:

http://djangosnippets.org/snippets/1597/

यह संभवतः एक TextField में बाइनरी डेटा संग्रहीत करने के लिए सबसे सरल उपाय है।

import base64 

from django.db import models 

class Foo(models.Model): 

    _data = models.TextField(
      db_column='data', 
      blank=True) 

    def set_data(self, data): 
     self._data = base64.encodestring(data) 

    def get_data(self): 
     return base64.decodestring(self._data) 

    data = property(get_data, set_data) 

वहाँ अन्य स्निपेट जो मदद कर सकता है की एक जोड़ी नहीं है।

+0

धन्यवाद। मैं कुछ इसी तरह का उपयोग कर रहा था, लेकिन वह स्निपेट कहीं अधिक सरल है। – Cerin

+3

महान स्निपेट के लिए धन्यवाद। क्या आपको पता है कि यह फ़िल्टरिंग का समर्थन करता है या नहीं? यानी 'foo.objects.filter (data = my_file)' get_data' के माध्यम से 'my_file' प्रक्रिया' है? – Patrick

10

मैं 'mysql' बैकएंड के लिए इस सरल क्षेत्र उपयोग किया गया है, तो आप अन्य बैकेंड

class BlobField(models.Field): 
    description = "Blob" 
    def db_type(self, connection): 
     return 'blob' 
+0

'कस्टम सिंक' –

+0

@MichaelWaterfall का उपयोग करते समय यह कस्टम फ़ील्ड त्रुटियों का कारण बनता है? –

+0

विस्तार की कमी के लिए खेद है, मैं उस समय जांच कर रहा था। Django 1.2 के रूप में [db_type] (https://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.Field.db_type) विधि 'कनेक्शन' तर्क लेती है। यह 'syncdb' के दौरान अपवाद का कारण था। मैंने कोड में संशोधन किया है। –

0

इसके अलावा के लिए इसे संशोधित, Django Storages' Database Storage: की जाँच कर सकते हैं।

मैंने अभी तक इसका उपयोग नहीं किया है, लेकिन यह शानदार दिखता है और जैसे ही मैं अपना उत्तर पोस्ट करता हूं, मैं इसका उपयोग शुरू करने जा रहा हूं।

19

यदि आप Django> = 1.6 का उपयोग कर रहे हैं, तो BinaryField

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