mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #34138 -- Avoided table rebuild when adding inline m2m fields on SQLite.
Regression in 2f73e5406d
.
Thanks David Wobrock for the report.
This commit is contained in:
parent
0f4964535c
commit
7b0e9ea53c
@ -379,7 +379,10 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||
|
||||
def add_field(self, model, field):
|
||||
"""Create a field on a model."""
|
||||
if (
|
||||
# Special-case implicit M2M tables.
|
||||
if field.many_to_many and field.remote_field.through._meta.auto_created:
|
||||
self.create_model(field.remote_field.through)
|
||||
elif (
|
||||
# Primary keys and unique fields are not supported in ALTER TABLE
|
||||
# ADD COLUMN.
|
||||
field.primary_key
|
||||
|
@ -9,4 +9,5 @@ Django 4.1.4 fixes several bugs in 4.1.3.
|
||||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a regression in Django 4.1 that caused an unnecessary table rebuilt
|
||||
when adding ``ManyToManyField`` on SQLite (:ticket:`34138`).
|
||||
|
@ -2200,8 +2200,25 @@ class SchemaTests(TransactionTestCase):
|
||||
with self.assertRaises(DatabaseError):
|
||||
self.column_classes(new_field.remote_field.through)
|
||||
# Add the field
|
||||
with connection.schema_editor() as editor:
|
||||
with CaptureQueriesContext(
|
||||
connection
|
||||
) as ctx, connection.schema_editor() as editor:
|
||||
editor.add_field(LocalAuthorWithM2M, new_field)
|
||||
# Table is not rebuilt.
|
||||
self.assertEqual(
|
||||
len(
|
||||
[
|
||||
query["sql"]
|
||||
for query in ctx.captured_queries
|
||||
if "CREATE TABLE" in query["sql"]
|
||||
]
|
||||
),
|
||||
1,
|
||||
)
|
||||
self.assertIs(
|
||||
any("DROP TABLE" in query["sql"] for query in ctx.captured_queries),
|
||||
False,
|
||||
)
|
||||
# Ensure there is now an m2m table there
|
||||
columns = self.column_classes(new_field.remote_field.through)
|
||||
self.assertEqual(
|
||||
|
Loading…
Reference in New Issue
Block a user