[1.8.x] Fixed #24892 -- Fixed quoting of SQL when renaming a field to AutoField in PostgreSQL
Backport of 5ab8680983
from master
This commit is contained in:
parent
3b41850adc
commit
8911d2e20f
|
@ -52,31 +52,31 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
self.sql_delete_sequence % {
|
self.sql_delete_sequence % {
|
||||||
"sequence": sequence_name,
|
"sequence": self.quote_name(sequence_name),
|
||||||
},
|
},
|
||||||
[],
|
[],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
self.sql_create_sequence % {
|
self.sql_create_sequence % {
|
||||||
"sequence": sequence_name,
|
"sequence": self.quote_name(sequence_name),
|
||||||
},
|
},
|
||||||
[],
|
[],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
self.sql_alter_column % {
|
self.sql_alter_column % {
|
||||||
"table": table,
|
"table": self.quote_name(table),
|
||||||
"changes": self.sql_alter_column_default % {
|
"changes": self.sql_alter_column_default % {
|
||||||
"column": column,
|
"column": self.quote_name(column),
|
||||||
"default": "nextval('%s')" % sequence_name,
|
"default": "nextval('%s')" % self.quote_name(sequence_name),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[],
|
[],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
self.sql_set_sequence_max % {
|
self.sql_set_sequence_max % {
|
||||||
"table": table,
|
"table": self.quote_name(table),
|
||||||
"column": column,
|
"column": self.quote_name(column),
|
||||||
"sequence": sequence_name,
|
"sequence": self.quote_name(sequence_name),
|
||||||
},
|
},
|
||||||
[],
|
[],
|
||||||
),
|
),
|
||||||
|
|
|
@ -31,3 +31,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a crash when using a reverse one-to-one relation in
|
* Fixed a crash when using a reverse one-to-one relation in
|
||||||
``ModelAdmin.list_display`` (:ticket:`24851`).
|
``ModelAdmin.list_display`` (:ticket:`24851`).
|
||||||
|
|
||||||
|
* Fixed quoting of SQL when renaming a field to ``AutoField`` in PostgreSQL
|
||||||
|
(:ticket:`24892`).
|
||||||
|
|
|
@ -80,6 +80,14 @@ class BookWithSlug(models.Model):
|
||||||
db_table = "schema_book"
|
db_table = "schema_book"
|
||||||
|
|
||||||
|
|
||||||
|
class IntegerPK(models.Model):
|
||||||
|
i = models.IntegerField(primary_key=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
apps = new_apps
|
||||||
|
db_table = "INTEGERPK" # uppercase to ensure proper quoting
|
||||||
|
|
||||||
|
|
||||||
class Note(models.Model):
|
class Note(models.Model):
|
||||||
info = models.TextField()
|
info = models.TextField()
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ from django.db import (
|
||||||
)
|
)
|
||||||
from django.db.models import Model
|
from django.db.models import Model
|
||||||
from django.db.models.fields import (
|
from django.db.models.fields import (
|
||||||
BigIntegerField, BinaryField, BooleanField, CharField, DateTimeField,
|
AutoField, BigIntegerField, BinaryField, BooleanField, CharField,
|
||||||
IntegerField, PositiveIntegerField, SlugField, TextField,
|
DateTimeField, IntegerField, PositiveIntegerField, SlugField, TextField,
|
||||||
)
|
)
|
||||||
from django.db.models.fields.related import (
|
from django.db.models.fields.related import (
|
||||||
ForeignKey, ManyToManyField, OneToOneField,
|
ForeignKey, ManyToManyField, OneToOneField,
|
||||||
|
@ -20,8 +20,8 @@ from django.test import TransactionTestCase, skipIfDBFeature
|
||||||
from .fields import CustomManyToManyField, InheritedManyToManyField
|
from .fields import CustomManyToManyField, InheritedManyToManyField
|
||||||
from .models import (
|
from .models import (
|
||||||
Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book, BookWeak,
|
Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book, BookWeak,
|
||||||
BookWithLongName, BookWithO2O, BookWithSlug, Note, NoteRename, Tag,
|
BookWithLongName, BookWithO2O, BookWithSlug, IntegerPK, Note, NoteRename,
|
||||||
TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest, new_apps,
|
Tag, TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest, new_apps,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ class SchemaTests(TransactionTestCase):
|
||||||
|
|
||||||
models = [
|
models = [
|
||||||
Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book,
|
Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book,
|
||||||
BookWeak, BookWithLongName, BookWithO2O, BookWithSlug, Note, Tag,
|
BookWeak, BookWithLongName, BookWithO2O, BookWithSlug, IntegerPK, Note,
|
||||||
TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest,
|
Tag, TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest,
|
||||||
]
|
]
|
||||||
|
|
||||||
# Utility functions
|
# Utility functions
|
||||||
|
@ -729,6 +729,22 @@ class SchemaTests(TransactionTestCase):
|
||||||
# field which drops the id sequence, at least on PostgreSQL.
|
# field which drops the id sequence, at least on PostgreSQL.
|
||||||
Author.objects.create(name='Foo')
|
Author.objects.create(name='Foo')
|
||||||
|
|
||||||
|
def test_alter_int_pk_to_autofield_pk(self):
|
||||||
|
"""
|
||||||
|
Should be able to rename an IntegerField(primary_key=True) to
|
||||||
|
AutoField(primary_key=True).
|
||||||
|
"""
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.create_model(IntegerPK)
|
||||||
|
|
||||||
|
old_field = IntegerPK._meta.get_field('i')
|
||||||
|
new_field = AutoField(primary_key=True)
|
||||||
|
new_field.model = IntegerPK
|
||||||
|
new_field.set_attributes_from_name('i')
|
||||||
|
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.alter_field(IntegerPK, old_field, new_field, strict=True)
|
||||||
|
|
||||||
def test_rename(self):
|
def test_rename(self):
|
||||||
"""
|
"""
|
||||||
Tests simple altering of fields
|
Tests simple altering of fields
|
||||||
|
|
Loading…
Reference in New Issue