Fixed #8210 and #8664: moved `USStateField` and `PhoneNumberField` to `django.contrib.localflavor.us`. This is a backwards-incompatible change, albeit a minor one; just add an aditional `import` and go on your way.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8819 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4f225d44ce
commit
3a18002bbd
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib.gis.db import models
|
from django.contrib.gis.db import models
|
||||||
|
from django.contrib.localflavor.us.models import USStateField
|
||||||
|
|
||||||
class Location(models.Model):
|
class Location(models.Model):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
|
@ -7,6 +8,6 @@ class Location(models.Model):
|
||||||
|
|
||||||
class City(models.Model):
|
class City(models.Model):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
state = models.USStateField()
|
state = USStateField()
|
||||||
location = models.ForeignKey(Location)
|
location = models.ForeignKey(Location)
|
||||||
objects = models.GeoManager()
|
objects = models.GeoManager()
|
||||||
|
|
|
@ -118,6 +118,7 @@ from django.contrib.gis.gdal.field import \
|
||||||
OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime
|
OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime
|
||||||
from django.contrib.gis.models import GeometryColumns, SpatialRefSys
|
from django.contrib.gis.models import GeometryColumns, SpatialRefSys
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
|
from django.contrib.localflavor.us.models import USStateField
|
||||||
|
|
||||||
# LayerMapping exceptions.
|
# LayerMapping exceptions.
|
||||||
class LayerMapError(Exception): pass
|
class LayerMapError(Exception): pass
|
||||||
|
@ -150,7 +151,7 @@ class LayerMapping(object):
|
||||||
models.SlugField : OFTString,
|
models.SlugField : OFTString,
|
||||||
models.TextField : OFTString,
|
models.TextField : OFTString,
|
||||||
models.URLField : OFTString,
|
models.URLField : OFTString,
|
||||||
models.USStateField : OFTString,
|
USStateField : OFTString,
|
||||||
models.XMLField : OFTString,
|
models.XMLField : OFTString,
|
||||||
models.SmallIntegerField : (OFTInteger, OFTReal, OFTString),
|
models.SmallIntegerField : (OFTInteger, OFTReal, OFTString),
|
||||||
models.PositiveSmallIntegerField : (OFTInteger, OFTReal, OFTString),
|
models.PositiveSmallIntegerField : (OFTInteger, OFTReal, OFTString),
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db.models.fields import Field
|
||||||
|
|
||||||
|
class USStateField(Field):
|
||||||
|
def get_internal_type(self):
|
||||||
|
return "USStateField"
|
||||||
|
|
||||||
|
def db_type(self):
|
||||||
|
if settings.DATABASE_ENGINE == 'oracle':
|
||||||
|
return 'CHAR(2)'
|
||||||
|
else:
|
||||||
|
return 'varchar(2)'
|
||||||
|
|
||||||
|
def formfield(self, **kwargs):
|
||||||
|
from django.contrib.localflavor.us.forms import USStateSelect
|
||||||
|
defaults = {'widget': USStateSelect}
|
||||||
|
defaults.update(kwargs)
|
||||||
|
return super(USStateField, self).formfield(**defaults)
|
||||||
|
|
||||||
|
class PhoneNumberField(Field):
|
||||||
|
def get_internal_type(self):
|
||||||
|
return "PhoneNumberField"
|
||||||
|
|
||||||
|
def db_type(self):
|
||||||
|
if settings.DATABASE_ENGINE == 'oracle':
|
||||||
|
return 'VARCHAR2(20)'
|
||||||
|
else:
|
||||||
|
return 'varchar(20)'
|
||||||
|
|
||||||
|
def formfield(self, **kwargs):
|
||||||
|
from django.contrib.localflavor.us.forms import USPhoneNumberField
|
||||||
|
defaults = {'form_class': USPhoneNumberField}
|
||||||
|
defaults.update(kwargs)
|
||||||
|
return super(PhoneNumberField, self).formfield(**defaults)
|
||||||
|
|
|
@ -21,14 +21,12 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
'IPAddressField': 'char(15)',
|
'IPAddressField': 'char(15)',
|
||||||
'NullBooleanField': 'bool',
|
'NullBooleanField': 'bool',
|
||||||
'OneToOneField': 'integer',
|
'OneToOneField': 'integer',
|
||||||
'PhoneNumberField': 'varchar(20)',
|
|
||||||
'PositiveIntegerField': 'integer UNSIGNED',
|
'PositiveIntegerField': 'integer UNSIGNED',
|
||||||
'PositiveSmallIntegerField': 'smallint UNSIGNED',
|
'PositiveSmallIntegerField': 'smallint UNSIGNED',
|
||||||
'SlugField': 'varchar(%(max_length)s)',
|
'SlugField': 'varchar(%(max_length)s)',
|
||||||
'SmallIntegerField': 'smallint',
|
'SmallIntegerField': 'smallint',
|
||||||
'TextField': 'longtext',
|
'TextField': 'longtext',
|
||||||
'TimeField': 'time',
|
'TimeField': 'time',
|
||||||
'USStateField': 'varchar(2)',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def sql_table_creation_suffix(self):
|
def sql_table_creation_suffix(self):
|
||||||
|
|
|
@ -30,7 +30,6 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
'IPAddressField': 'VARCHAR2(15)',
|
'IPAddressField': 'VARCHAR2(15)',
|
||||||
'NullBooleanField': 'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
|
'NullBooleanField': 'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
|
||||||
'OneToOneField': 'NUMBER(11)',
|
'OneToOneField': 'NUMBER(11)',
|
||||||
'PhoneNumberField': 'VARCHAR2(20)',
|
|
||||||
'PositiveIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
|
'PositiveIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
|
||||||
'PositiveSmallIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
|
'PositiveSmallIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
|
||||||
'SlugField': 'NVARCHAR2(50)',
|
'SlugField': 'NVARCHAR2(50)',
|
||||||
|
@ -38,7 +37,6 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
'TextField': 'NCLOB',
|
'TextField': 'NCLOB',
|
||||||
'TimeField': 'TIMESTAMP',
|
'TimeField': 'TIMESTAMP',
|
||||||
'URLField': 'VARCHAR2(%(max_length)s)',
|
'URLField': 'VARCHAR2(%(max_length)s)',
|
||||||
'USStateField': 'CHAR(2)',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remember = {}
|
remember = {}
|
||||||
|
|
|
@ -21,14 +21,12 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
'IPAddressField': 'inet',
|
'IPAddressField': 'inet',
|
||||||
'NullBooleanField': 'boolean',
|
'NullBooleanField': 'boolean',
|
||||||
'OneToOneField': 'integer',
|
'OneToOneField': 'integer',
|
||||||
'PhoneNumberField': 'varchar(20)',
|
|
||||||
'PositiveIntegerField': 'integer CHECK ("%(column)s" >= 0)',
|
'PositiveIntegerField': 'integer CHECK ("%(column)s" >= 0)',
|
||||||
'PositiveSmallIntegerField': 'smallint CHECK ("%(column)s" >= 0)',
|
'PositiveSmallIntegerField': 'smallint CHECK ("%(column)s" >= 0)',
|
||||||
'SlugField': 'varchar(%(max_length)s)',
|
'SlugField': 'varchar(%(max_length)s)',
|
||||||
'SmallIntegerField': 'smallint',
|
'SmallIntegerField': 'smallint',
|
||||||
'TextField': 'text',
|
'TextField': 'text',
|
||||||
'TimeField': 'time',
|
'TimeField': 'time',
|
||||||
'USStateField': 'varchar(2)',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def sql_table_creation_suffix(self):
|
def sql_table_creation_suffix(self):
|
||||||
|
|
|
@ -22,14 +22,12 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
'IPAddressField': 'char(15)',
|
'IPAddressField': 'char(15)',
|
||||||
'NullBooleanField': 'bool',
|
'NullBooleanField': 'bool',
|
||||||
'OneToOneField': 'integer',
|
'OneToOneField': 'integer',
|
||||||
'PhoneNumberField': 'varchar(20)',
|
|
||||||
'PositiveIntegerField': 'integer unsigned',
|
'PositiveIntegerField': 'integer unsigned',
|
||||||
'PositiveSmallIntegerField': 'smallint unsigned',
|
'PositiveSmallIntegerField': 'smallint unsigned',
|
||||||
'SlugField': 'varchar(%(max_length)s)',
|
'SlugField': 'varchar(%(max_length)s)',
|
||||||
'SmallIntegerField': 'smallint',
|
'SmallIntegerField': 'smallint',
|
||||||
'TextField': 'text',
|
'TextField': 'text',
|
||||||
'TimeField': 'time',
|
'TimeField': 'time',
|
||||||
'USStateField': 'varchar(2)',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def sql_for_pending_references(self, model, style, pending_references):
|
def sql_for_pending_references(self, model, style, pending_references):
|
||||||
|
|
|
@ -741,16 +741,6 @@ class NullBooleanField(Field):
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return super(NullBooleanField, self).formfield(**defaults)
|
return super(NullBooleanField, self).formfield(**defaults)
|
||||||
|
|
||||||
class PhoneNumberField(Field):
|
|
||||||
def get_internal_type(self):
|
|
||||||
return "PhoneNumberField"
|
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
|
||||||
from django.contrib.localflavor.us.forms import USPhoneNumberField
|
|
||||||
defaults = {'form_class': USPhoneNumberField}
|
|
||||||
defaults.update(kwargs)
|
|
||||||
return super(PhoneNumberField, self).formfield(**defaults)
|
|
||||||
|
|
||||||
class PositiveIntegerField(IntegerField):
|
class PositiveIntegerField(IntegerField):
|
||||||
def get_internal_type(self):
|
def get_internal_type(self):
|
||||||
return "PositiveIntegerField"
|
return "PositiveIntegerField"
|
||||||
|
@ -876,16 +866,6 @@ class URLField(CharField):
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return super(URLField, self).formfield(**defaults)
|
return super(URLField, self).formfield(**defaults)
|
||||||
|
|
||||||
class USStateField(Field):
|
|
||||||
def get_internal_type(self):
|
|
||||||
return "USStateField"
|
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
|
||||||
from django.contrib.localflavor.us.forms import USStateSelect
|
|
||||||
defaults = {'widget': USStateSelect}
|
|
||||||
defaults.update(kwargs)
|
|
||||||
return super(USStateField, self).formfield(**defaults)
|
|
||||||
|
|
||||||
class XMLField(TextField):
|
class XMLField(TextField):
|
||||||
def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs):
|
def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs):
|
||||||
self.schema_path = schema_path
|
self.schema_path = schema_path
|
||||||
|
|
|
@ -649,3 +649,8 @@ United States of America (``us``)
|
||||||
|
|
||||||
A form ``Select`` widget that uses a list of U.S. states/territories as its
|
A form ``Select`` widget that uses a list of U.S. states/territories as its
|
||||||
choices.
|
choices.
|
||||||
|
|
||||||
|
.. class:: us.models.USStateField
|
||||||
|
|
||||||
|
A model field that forms represent as a ``forms.USStateField`` field and
|
||||||
|
stores the two-letter U.S. state abbreviation in the database.
|
||||||
|
|
|
@ -705,14 +705,6 @@ Like all ::class:`CharField` subclasses, :class:`URLField` takes the optional
|
||||||
:attr:`~CharField.max_length`argument. If you don't specify
|
:attr:`~CharField.max_length`argument. If you don't specify
|
||||||
:attr:`~CharField.max_length`, a default of 200 is used.
|
:attr:`~CharField.max_length`, a default of 200 is used.
|
||||||
|
|
||||||
``USStateField``
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. class:: USStateField([**options])
|
|
||||||
|
|
||||||
A two-letter U.S. state abbreviation. The admin represents this as an ``<input
|
|
||||||
type="text">`` (a single-line input).
|
|
||||||
|
|
||||||
``XMLField``
|
``XMLField``
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
|
@ -625,13 +625,14 @@ model.
|
||||||
|
|
||||||
For example, this model has a few custom methods::
|
For example, this model has a few custom methods::
|
||||||
|
|
||||||
|
from django.contrib.localflavor.us.models import USStateField
|
||||||
class Person(models.Model):
|
class Person(models.Model):
|
||||||
first_name = models.CharField(max_length=50)
|
first_name = models.CharField(max_length=50)
|
||||||
last_name = models.CharField(max_length=50)
|
last_name = models.CharField(max_length=50)
|
||||||
birth_date = models.DateField()
|
birth_date = models.DateField()
|
||||||
address = models.CharField(max_length=100)
|
address = models.CharField(max_length=100)
|
||||||
city = models.CharField(max_length=50)
|
city = models.CharField(max_length=50)
|
||||||
state = models.USStateField() # Yes, this is America-centric...
|
state = USStateField() # Yes, this is America-centric...
|
||||||
|
|
||||||
def baby_boomer_status(self):
|
def baby_boomer_status(self):
|
||||||
"Returns the person's baby-boomer status."
|
"Returns the person's baby-boomer status."
|
||||||
|
|
|
@ -73,10 +73,6 @@ the full list of conversions:
|
||||||
``TimeField`` ``TimeField``
|
``TimeField`` ``TimeField``
|
||||||
``URLField`` ``URLField`` with ``verify_exists`` set
|
``URLField`` ``URLField`` with ``verify_exists`` set
|
||||||
to the model field's ``verify_exists``
|
to the model field's ``verify_exists``
|
||||||
``USStateField`` ``CharField`` with
|
|
||||||
``widget=USStateSelect``
|
|
||||||
(``USStateSelect`` is from
|
|
||||||
``django.contrib.localflavor.us``)
|
|
||||||
``XMLField`` ``CharField`` with ``widget=Textarea``
|
``XMLField`` ``CharField`` with ``widget=Textarea``
|
||||||
=============================== ========================================
|
=============================== ========================================
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,9 @@ class WriterProfile(models.Model):
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "%s is %s" % (self.writer, self.age)
|
return "%s is %s" % (self.writer, self.age)
|
||||||
|
|
||||||
|
from django.contrib.localflavor.us.models import PhoneNumberField
|
||||||
class PhoneNumber(models.Model):
|
class PhoneNumber(models.Model):
|
||||||
phone = models.PhoneNumberField()
|
phone = PhoneNumberField()
|
||||||
description = models.CharField(max_length=20)
|
description = models.CharField(max_length=20)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|
|
@ -8,6 +8,7 @@ This class sets up a model for each model field type
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.contrib.localflavor.us.models import USStateField, PhoneNumberField
|
||||||
|
|
||||||
# The following classes are for testing basic data
|
# The following classes are for testing basic data
|
||||||
# marshalling, including NULL values.
|
# marshalling, including NULL values.
|
||||||
|
@ -52,7 +53,7 @@ class NullBooleanData(models.Model):
|
||||||
data = models.NullBooleanField(null=True)
|
data = models.NullBooleanField(null=True)
|
||||||
|
|
||||||
class PhoneData(models.Model):
|
class PhoneData(models.Model):
|
||||||
data = models.PhoneNumberField(null=True)
|
data = PhoneNumberField(null=True)
|
||||||
|
|
||||||
class PositiveIntegerData(models.Model):
|
class PositiveIntegerData(models.Model):
|
||||||
data = models.PositiveIntegerField(null=True)
|
data = models.PositiveIntegerField(null=True)
|
||||||
|
@ -73,7 +74,7 @@ class TimeData(models.Model):
|
||||||
data = models.TimeField(null=True)
|
data = models.TimeField(null=True)
|
||||||
|
|
||||||
class USStateData(models.Model):
|
class USStateData(models.Model):
|
||||||
data = models.USStateField(null=True)
|
data = USStateField(null=True)
|
||||||
|
|
||||||
class XMLData(models.Model):
|
class XMLData(models.Model):
|
||||||
data = models.XMLField(null=True)
|
data = models.XMLField(null=True)
|
||||||
|
@ -188,7 +189,7 @@ class IPAddressPKData(models.Model):
|
||||||
# data = models.NullBooleanField(primary_key=True)
|
# data = models.NullBooleanField(primary_key=True)
|
||||||
|
|
||||||
class PhonePKData(models.Model):
|
class PhonePKData(models.Model):
|
||||||
data = models.PhoneNumberField(primary_key=True)
|
data = PhoneNumberField(primary_key=True)
|
||||||
|
|
||||||
class PositiveIntegerPKData(models.Model):
|
class PositiveIntegerPKData(models.Model):
|
||||||
data = models.PositiveIntegerField(primary_key=True)
|
data = models.PositiveIntegerField(primary_key=True)
|
||||||
|
@ -209,7 +210,7 @@ class SmallPKData(models.Model):
|
||||||
# data = models.TimeField(primary_key=True)
|
# data = models.TimeField(primary_key=True)
|
||||||
|
|
||||||
class USStatePKData(models.Model):
|
class USStatePKData(models.Model):
|
||||||
data = models.USStateField(primary_key=True)
|
data = USStateField(primary_key=True)
|
||||||
|
|
||||||
# class XMLPKData(models.Model):
|
# class XMLPKData(models.Model):
|
||||||
# data = models.XMLField(primary_key=True)
|
# data = models.XMLField(primary_key=True)
|
||||||
|
|
Loading…
Reference in New Issue