mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Refs #31630 -- Added CharField and IntegerField to DatabaseFeatures.introspected_field_types.
CockroachDB introspects CharField as TextField and IntegerField as BigIntegerField.
This commit is contained in:
parent
e24b63fe85
commit
a7b4a04d6c
4 changed files with 53 additions and 43 deletions
|
@ -498,7 +498,7 @@ class SchemaTests(TransactionTestCase):
|
|||
self.assertFalse(any(drop_default_sql in query['sql'] for query in ctx.captured_queries))
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['age'][0], "IntegerField")
|
||||
self.assertEqual(columns['age'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
self.assertTrue(columns['age'][1][6])
|
||||
|
||||
def test_add_field_remove_field(self):
|
||||
|
@ -532,7 +532,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.add_field(Author, new_field)
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['surname'][0], "CharField")
|
||||
self.assertEqual(columns['surname'][0], connection.features.introspected_field_types['CharField'])
|
||||
self.assertEqual(columns['surname'][1][6],
|
||||
connection.features.interprets_empty_strings_as_nulls)
|
||||
|
||||
|
@ -592,7 +592,7 @@ class SchemaTests(TransactionTestCase):
|
|||
# Ensure the field is there
|
||||
columns = self.column_classes(Author)
|
||||
field_type, field_info = columns['thing']
|
||||
self.assertEqual(field_type, 'IntegerField')
|
||||
self.assertEqual(field_type, connection.features.introspected_field_types['IntegerField'])
|
||||
# Make sure the values were transformed correctly
|
||||
self.assertEqual(Author.objects.extra(where=["thing = 1"]).count(), 2)
|
||||
|
||||
|
@ -640,7 +640,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(Author)
|
||||
# Ensure the field is right to begin with
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['name'][0], "CharField")
|
||||
self.assertEqual(columns['name'][0], connection.features.introspected_field_types['CharField'])
|
||||
self.assertEqual(bool(columns['name'][1][6]), bool(connection.features.interprets_empty_strings_as_nulls))
|
||||
# Alter the name field to a TextField
|
||||
old_field = Author._meta.get_field("name")
|
||||
|
@ -1022,7 +1022,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(Book)
|
||||
# Ensure the field is right to begin with
|
||||
columns = self.column_classes(Book)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
self.assertForeignKeyExists(Book, 'author_id', 'schema_author')
|
||||
# Alter the FK
|
||||
old_field = Book._meta.get_field("author")
|
||||
|
@ -1032,7 +1032,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.alter_field(Book, old_field, new_field, strict=True)
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(Book)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
self.assertForeignKeyExists(Book, 'author_id', 'schema_author')
|
||||
|
||||
@skipUnlessDBFeature('supports_foreign_keys')
|
||||
|
@ -1078,7 +1078,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(BookWithO2O)
|
||||
# Ensure the field is right to begin with
|
||||
columns = self.column_classes(BookWithO2O)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
# Ensure the field is unique
|
||||
author = Author.objects.create(name="Joe")
|
||||
BookWithO2O.objects.create(author=author, title="Django 1", pub_date=datetime.datetime.now())
|
||||
|
@ -1094,7 +1094,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.alter_field(BookWithO2O, old_field, new_field, strict=True)
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(Book)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
# Ensure the field is not unique anymore
|
||||
Book.objects.create(author=author, title="Django 1", pub_date=datetime.datetime.now())
|
||||
Book.objects.create(author=author, title="Django 2", pub_date=datetime.datetime.now())
|
||||
|
@ -1111,7 +1111,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(Book)
|
||||
# Ensure the field is right to begin with
|
||||
columns = self.column_classes(Book)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
# Ensure the field is not unique
|
||||
author = Author.objects.create(name="Joe")
|
||||
Book.objects.create(author=author, title="Django 1", pub_date=datetime.datetime.now())
|
||||
|
@ -1126,7 +1126,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.alter_field(Book, old_field, new_field, strict=True)
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(BookWithO2O)
|
||||
self.assertEqual(columns['author_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['author_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
# Ensure the field is unique now
|
||||
BookWithO2O.objects.create(author=author, title="Django 1", pub_date=datetime.datetime.now())
|
||||
with self.assertRaises(IntegrityError):
|
||||
|
@ -1438,7 +1438,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(Author)
|
||||
# Ensure the field is right to begin with
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['name'][0], "CharField")
|
||||
self.assertEqual(columns['name'][0], connection.features.introspected_field_types['CharField'])
|
||||
self.assertNotIn("display_name", columns)
|
||||
# Alter the name field's name
|
||||
old_field = Author._meta.get_field("name")
|
||||
|
@ -1448,7 +1448,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.alter_field(Author, old_field, new_field, strict=True)
|
||||
# Ensure the field is right afterwards
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['display_name'][0], "CharField")
|
||||
self.assertEqual(columns['display_name'][0], connection.features.introspected_field_types['CharField'])
|
||||
self.assertNotIn("name", columns)
|
||||
|
||||
@isolate_apps('schema')
|
||||
|
@ -1516,7 +1516,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(LocalBookWithM2M)
|
||||
# Ensure there is now an m2m table there
|
||||
columns = self.column_classes(LocalBookWithM2M._meta.get_field("tags").remote_field.through)
|
||||
self.assertEqual(columns['tagm2mtest_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['tagm2mtest_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
|
||||
def test_m2m_create(self):
|
||||
self._test_m2m_create(ManyToManyField)
|
||||
|
@ -1555,8 +1555,8 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(LocalBookWithM2MThrough)
|
||||
# Ensure there is now an m2m table there
|
||||
columns = self.column_classes(LocalTagThrough)
|
||||
self.assertEqual(columns['book_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['tag_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['book_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
self.assertEqual(columns['tag_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
|
||||
def test_m2m_create_through(self):
|
||||
self._test_m2m_create_through(ManyToManyField)
|
||||
|
@ -1595,7 +1595,7 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.add_field(LocalAuthorWithM2M, new_field)
|
||||
# Ensure there is now an m2m table there
|
||||
columns = self.column_classes(new_field.remote_field.through)
|
||||
self.assertEqual(columns['tagm2mtest_id'][0], "IntegerField")
|
||||
self.assertEqual(columns['tagm2mtest_id'][0], connection.features.introspected_field_types['IntegerField'])
|
||||
|
||||
# "Alter" the field. This should not rename the DB table to itself.
|
||||
with connection.schema_editor() as editor:
|
||||
|
@ -2268,14 +2268,14 @@ class SchemaTests(TransactionTestCase):
|
|||
editor.create_model(Book)
|
||||
# Ensure the table is there to begin with
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['name'][0], "CharField")
|
||||
self.assertEqual(columns['name'][0], connection.features.introspected_field_types['CharField'])
|
||||
# Alter the table
|
||||
with connection.schema_editor(atomic=connection.features.supports_atomic_references_rename) as editor:
|
||||
editor.alter_db_table(Author, "schema_author", "schema_otherauthor")
|
||||
# Ensure the table is there afterwards
|
||||
Author._meta.db_table = "schema_otherauthor"
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['name'][0], "CharField")
|
||||
self.assertEqual(columns['name'][0], connection.features.introspected_field_types['CharField'])
|
||||
# Ensure the foreign key reference was updated
|
||||
self.assertForeignKeyExists(Book, "author_id", "schema_otherauthor")
|
||||
# Alter the table again
|
||||
|
@ -2284,7 +2284,7 @@ class SchemaTests(TransactionTestCase):
|
|||
# Ensure the table is still there
|
||||
Author._meta.db_table = "schema_author"
|
||||
columns = self.column_classes(Author)
|
||||
self.assertEqual(columns['name'][0], "CharField")
|
||||
self.assertEqual(columns['name'][0], connection.features.introspected_field_types['CharField'])
|
||||
|
||||
def test_add_remove_index(self):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue