Fixed #12400 -- Allowed geometry fields in unique_together

Thanks Tim Graham for the review.
This commit is contained in:
Claude Paroz 2015-03-21 17:38:23 +01:00
parent b4da88b126
commit 01ec127bae
3 changed files with 8 additions and 5 deletions

View File

@ -31,7 +31,6 @@ class BaseDatabaseSchemaEditor(object):
# Overrideable SQL templates
sql_create_table = "CREATE TABLE %(table)s (%(definition)s)"
sql_create_table_unique = "UNIQUE (%(columns)s)"
sql_rename_table = "ALTER TABLE %(old_table)s RENAME TO %(new_table)s"
sql_retablespace_table = "ALTER TABLE %(table)s SET TABLESPACE %(new_tablespace)s"
sql_delete_table = "DROP TABLE %(table)s CASCADE"
@ -263,12 +262,11 @@ class BaseDatabaseSchemaEditor(object):
if autoinc_sql:
self.deferred_sql.extend(autoinc_sql)
# Add any unique_togethers
# Add any unique_togethers (always deferred, as some fields might be
# created afterwards, like geometry fields with some backends)
for fields in model._meta.unique_together:
columns = [model._meta.get_field(field).column for field in fields]
column_sqls.append(self.sql_create_table_unique % {
"columns": ", ".join(self.quote_name(column) for column in columns),
})
self.deferred_sql.append(self._create_unique_sql(model, columns))
# Make the table
sql = self.sql_create_table % {
"table": self.quote_name(model._meta.db_table),

View File

@ -13,6 +13,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
sql_delete_table = "DROP TABLE %(table)s"
sql_create_inline_fk = "REFERENCES %(to_table)s (%(to_column)s)"
sql_create_unique = "CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)"
sql_delete_unique = "DROP INDEX %(name)s"
def __enter__(self):
with self.connection.cursor() as c:

View File

@ -57,6 +57,9 @@ class MultiFields(NamedModel):
point = models.PointField()
poly = models.PolygonField()
class Meta:
unique_together = ('city', 'point')
class Truth(models.Model):
val = models.BooleanField(default=False)