У меня есть требование хранить изображения в базе данных, используя django, и для этого я создал настраиваемое поле:
from django.db import models
class BlobField(models.Field):
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
#TODO handle other db engines
backend = connection.settings_dict['ENGINE']
if backend == 'django.db.backends.postgresql':
return 'bytea'
elif backend == 'django.db.backends.sqlite3':
return 'blob'
else:
raise Exception('unsuported db')
def to_python(self, value):
#TODO
return value
def get_db_prep_value(self, value, connection, prepared=False):
#TODO
return value
Я уже внедрил пользовательскую систему хранения для обработки хранения / извлечения изображений с использованием пользовательской модели (которая содержит вышеуказанный BlobField). Параметр 'value' в методе 'get_db_prep_value' является объектом 'StringIO', который содержит двоичные данные изображения. Суть в том, что я не знаю, что возвращать в методе get_db_prep_value, поскольку объект StringIO наверняка будет содержать непечатаемые символы.
У меня есть несколько вопросов о проблеме:
- Что я должен вернуть в методе get_db_prep_value?
- Если ожидаемое значение является строкой ASCII, могу ли я представить большой двоичный объект (шестнадцатеричные экранирования) независимым от базы данных способом?
- Если нет, то есть ли встроенные библиотеки, которые обрабатывают этот тип преобразования для меня?
- Что я могу получить в качестве входных данных для метода 'to_python' и как я могу преобразовать его в объект StringIO?