Джанго Блоб Модельное Поле - PullRequest
28 голосов
/ 06 февраля 2011

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

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

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

Ответы [ 4 ]

27 голосов
/ 06 февраля 2011

Этот фрагмент хорош:

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)

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

21 голосов
/ 04 марта 2014

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

10 голосов
/ 23 сентября 2011

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

class BlobField(models.Field):
    description = "Blob"
    def db_type(self, connection):
        return 'blob'
0 голосов
/ 11 июля 2012

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

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

...