diff --git a/django/core/db/backends/mysql.py b/django/core/db/backends/mysql.py index d6a2014d3e..e678740b33 100644 --- a/django/core/db/backends/mysql.py +++ b/django/core/db/backends/mysql.py @@ -133,7 +133,6 @@ DATA_TYPES = { 'TimeField': 'time', 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', - 'XMLField': 'longtext', } DATA_TYPES_REVERSE = { diff --git a/django/core/db/backends/postgresql.py b/django/core/db/backends/postgresql.py index c623a5eed4..683ae3c9ee 100644 --- a/django/core/db/backends/postgresql.py +++ b/django/core/db/backends/postgresql.py @@ -170,7 +170,6 @@ DATA_TYPES = { 'TimeField': 'time', 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', - 'XMLField': 'text', } # Maps type codes to Django Field types. diff --git a/django/core/db/backends/sqlite3.py b/django/core/db/backends/sqlite3.py index fd44341400..d4b936f82e 100644 --- a/django/core/db/backends/sqlite3.py +++ b/django/core/db/backends/sqlite3.py @@ -170,7 +170,6 @@ DATA_TYPES = { 'TimeField': 'time', 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', - 'XMLField': 'text', } DATA_TYPES_REVERSE = {} diff --git a/django/core/management.py b/django/core/management.py index ae0b6683b5..d494564d6b 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -47,7 +47,7 @@ def _is_valid_dir_name(s): # If the foreign key points to an AutoField, the foreign key should be an # IntegerField, not an AutoField. Otherwise, the foreign key should be the same # type of field as the field to which it points. -get_rel_data_type = lambda f: (f.__class__.__name__ == 'AutoField') and 'IntegerField' or f.__class__.__name__ +get_rel_data_type = lambda f: (f.get_internal_type() == 'AutoField') and 'IntegerField' or f.get_internal_type() def get_sql_create(mod): "Returns a list of the CREATE TABLE SQL statements for the given module." @@ -62,7 +62,7 @@ def get_sql_create(mod): data_type = get_rel_data_type(rel_field) else: rel_field = f - data_type = f.__class__.__name__ + data_type = f.get_internal_type() col_type = db.DATA_TYPES[data_type] if col_type is not None: field_output = [f.column, col_type % rel_field.__dict__] @@ -634,7 +634,7 @@ def createcachetable(tablename): table_output = [] index_output = [] for f in fields: - field_output = [f.column, db.DATA_TYPES[f.__class__.__name__] % f.__dict__] + field_output = [f.column, db.DATA_TYPES[f.get_internal_type()] % f.__dict__] field_output.append("%sNULL" % (not f.null and "NOT " or "")) if f.unique: field_output.append("UNIQUE") diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py index 56ded6edd7..3e5cca169d 100644 --- a/django/core/meta/fields.py +++ b/django/core/meta/fields.py @@ -114,6 +114,9 @@ class Field(object): def get_cache_name(self): return '_%s_cache' % self.name + def get_internal_type(self): + return self.__class__.__name__ + def pre_save(self, value, add): "Returns field's value just before saving." return value @@ -552,11 +555,14 @@ class USStateField(Field): def get_manipulator_field_objs(self): return [formfields.USStateField] -class XMLField(Field): +class XMLField(TextField): def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs): self.schema_path = schema_path Field.__init__(self, verbose_name, name, **kwargs) + def get_internal_type(self): + return "TextField" + def get_manipulator_field_objs(self): return [curry(formfields.XMLLargeTextField, schema_path=self.schema_path)]