summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-09-28 23:08:47 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-09-28 23:08:47 +0000
commitc1a16d54b0fce2ffe89eab9a69e689f87a4c1ddc (patch)
treecc6b1175cb02965402868d08fb61ce32d61d8aa1
parentcd34c163cc862113da5b27bf9f5ff452f538fb2c (diff)
Fixed #553 -- Added django.core.meta.fields.Field.get_internal_type() hook, for creating custom meta.Field subclasses. Thanks, wojtek3
git-svn-id: http://code.djangoproject.com/svn/django/trunk@713 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/db/backends/mysql.py1
-rw-r--r--django/core/db/backends/postgresql.py1
-rw-r--r--django/core/db/backends/sqlite3.py1
-rw-r--r--django/core/management.py6
-rw-r--r--django/core/meta/fields.py8
5 files changed, 10 insertions, 7 deletions
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)]