Подтвердить что ты не робот

Поле модели Django Blob

Как вы храните "blob" двоичных данных с помощью Django ORM с бэкэнд PostgreSQL? Да, я знаю, что Django хмурится этим делом, и да, я знаю, что они предпочитают использовать для этого ImageField или FileField, но достаточно сказать, что это непрактично для моего приложения.

Я попытался взломать его с помощью TextField, но я получаю случайные ошибки, когда мои двоичные данные не подтверждают строго тип кодировки моделей, который по умолчанию является unicode. например

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

Ответ 1

Этот фрагмент полезен:

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)

Там есть несколько других фрагментов, которые могут помочь.

Ответ 2

Если вы используете Django >= 1.6, там BinaryField

Ответ 3

Я использую это простое поле для бэкэнд mysql, вы можете изменить его для других бэкэндов

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

Ответ 4

Кроме того, проверьте Хранилище базы данных Django Storage:.

Я еще не использовал его, но он выглядит потрясающе, и я начну использовать его, как только отправлю свой ответ.