Commit 8ee1eddb authored by Claude Paroz's avatar Claude Paroz
Browse files

Add a BinaryField model field

Thanks Michael Jung, Charl Botha and Florian Apolloner for review
and help on the patch.
parent 0f306cad
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ class DatabaseCreation(BaseDatabaseCreation):
    # If a column type is set to None, it won't be included in the output.
    data_types = {
        'AutoField':         'integer AUTO_INCREMENT',
        'BinaryField':       'longblob',
        'BooleanField':      'bool',
        'CharField':         'varchar(%(max_length)s)',
        'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ class DatabaseCreation(BaseDatabaseCreation):

    data_types = {
        'AutoField':                    'NUMBER(11)',
        'BinaryField':                  'BLOB',
        'BooleanField':                 'NUMBER(1) CHECK (%(qn_column)s IN (0,1))',
        'CharField':                    'NVARCHAR2(%(max_length)s)',
        'CommaSeparatedIntegerField':   'VARCHAR2(%(max_length)s)',
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ class DatabaseCreation(BaseDatabaseCreation):
    # If a column type is set to None, it won't be included in the output.
    data_types = {
        'AutoField':         'serial',
        'BinaryField':       'bytea',
        'BooleanField':      'boolean',
        'CharField':         'varchar(%(max_length)s)',
        'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ class DatabaseCreation(BaseDatabaseCreation):
    # schema inspection is more useful.
    data_types = {
        'AutoField':                    'integer',
        'BinaryField':                  'BLOB',
        'BooleanField':                 'bool',
        'CharField':                    'varchar(%(max_length)s)',
        'CommaSeparatedIntegerField':   'varchar(%(max_length)s)',
+27 −0
Original line number Diff line number Diff line
@@ -1291,3 +1291,30 @@ class URLField(CharField):
        }
        defaults.update(kwargs)
        return super(URLField, self).formfield(**defaults)

class BinaryField(Field):
    description = _("Raw binary data")

    def __init__(self, *args, **kwargs):
        kwargs['editable'] = False
        super(BinaryField, self).__init__(*args, **kwargs)
        if self.max_length is not None:
            self.validators.append(validators.MaxLengthValidator(self.max_length))

    def get_internal_type(self):
        return "BinaryField"

    def get_default(self):
        if self.has_default() and not callable(self.default):
            return self.default
        default = super(BinaryField, self).get_default()
        if default == '':
            return b''
        return default

    def get_db_prep_value(self, value, connection, prepared=False):
        value = super(BinaryField, self
            ).get_db_prep_value(value, connection, prepared)
        if value is not None:
            return connection.Database.Binary(value)
        return value
Loading