mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #21127 -- Started deprecation toward requiring on_delete for ForeignKey/OneToOneField
This commit is contained in:
committed by
Tim Graham
parent
87d55081ea
commit
c2e70f0265
@@ -7,6 +7,7 @@ from django.db import (
|
||||
DatabaseError, IntegrityError, OperationalError, connection,
|
||||
)
|
||||
from django.db.models import Model
|
||||
from django.db.models.deletion import CASCADE
|
||||
from django.db.models.fields import (
|
||||
AutoField, BigIntegerField, BinaryField, BooleanField, CharField,
|
||||
DateField, DateTimeField, IntegerField, PositiveIntegerField, SlugField,
|
||||
@@ -161,7 +162,7 @@ class SchemaTests(TransactionTestCase):
|
||||
)
|
||||
# Repoint the FK constraint
|
||||
old_field = Book._meta.get_field("author")
|
||||
new_field = ForeignKey(Tag)
|
||||
new_field = ForeignKey(Tag, CASCADE)
|
||||
new_field.set_attributes_from_name("author")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(Book, old_field, new_field, strict=True)
|
||||
@@ -192,7 +193,7 @@ class SchemaTests(TransactionTestCase):
|
||||
if details['columns'] == ["author_id"] and details['foreign_key']:
|
||||
self.fail("FK constraint for author_id found")
|
||||
# Make a db_constraint=False FK
|
||||
new_field = ForeignKey(Tag, db_constraint=False)
|
||||
new_field = ForeignKey(Tag, CASCADE, db_constraint=False)
|
||||
new_field.set_attributes_from_name("tag")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.add_field(Author, new_field)
|
||||
@@ -202,7 +203,7 @@ class SchemaTests(TransactionTestCase):
|
||||
if details['columns'] == ["tag_id"] and details['foreign_key']:
|
||||
self.fail("FK constraint for tag_id found")
|
||||
# Alter to one with a constraint
|
||||
new_field2 = ForeignKey(Tag)
|
||||
new_field2 = ForeignKey(Tag, CASCADE)
|
||||
new_field2.set_attributes_from_name("tag")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(Author, new_field, new_field2, strict=True)
|
||||
@@ -215,7 +216,7 @@ class SchemaTests(TransactionTestCase):
|
||||
else:
|
||||
self.fail("No FK constraint for tag_id found")
|
||||
# Alter to one without a constraint again
|
||||
new_field2 = ForeignKey(Tag)
|
||||
new_field2 = ForeignKey(Tag, CASCADE)
|
||||
new_field2.set_attributes_from_name("tag")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(Author, new_field2, new_field, strict=True)
|
||||
@@ -632,7 +633,7 @@ class SchemaTests(TransactionTestCase):
|
||||
self.fail("No FK constraint for author_id found")
|
||||
# Alter the FK
|
||||
old_field = Book._meta.get_field("author")
|
||||
new_field = ForeignKey(Author, editable=False)
|
||||
new_field = ForeignKey(Author, CASCADE, editable=False)
|
||||
new_field.set_attributes_from_name("author")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(Book, old_field, new_field, strict=True)
|
||||
@@ -674,7 +675,7 @@ class SchemaTests(TransactionTestCase):
|
||||
if details['foreign_key']:
|
||||
self.fail('Found an unexpected FK constraint to %s' % details['columns'])
|
||||
old_field = LocalBook._meta.get_field("author")
|
||||
new_field = ForeignKey(Author)
|
||||
new_field = ForeignKey(Author, CASCADE)
|
||||
new_field.set_attributes_from_name("author")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(LocalBook, old_field, new_field, strict=True)
|
||||
@@ -715,7 +716,7 @@ class SchemaTests(TransactionTestCase):
|
||||
self.assertTrue(author_is_fk, "No FK constraint for author_id found")
|
||||
# Alter the OneToOneField to ForeignKey
|
||||
old_field = BookWithO2O._meta.get_field("author")
|
||||
new_field = ForeignKey(Author)
|
||||
new_field = ForeignKey(Author, CASCADE)
|
||||
new_field.set_attributes_from_name("author")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(BookWithO2O, old_field, new_field, strict=True)
|
||||
@@ -761,7 +762,7 @@ class SchemaTests(TransactionTestCase):
|
||||
self.assertTrue(author_is_fk, "No FK constraint for author_id found")
|
||||
# Alter the ForeignKey to OneToOneField
|
||||
old_field = Book._meta.get_field("author")
|
||||
new_field = OneToOneField(Author)
|
||||
new_field = OneToOneField(Author, CASCADE)
|
||||
new_field.set_attributes_from_name("author")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(Book, old_field, new_field, strict=True)
|
||||
@@ -901,7 +902,7 @@ class SchemaTests(TransactionTestCase):
|
||||
Tests M2M fields on models during creation
|
||||
"""
|
||||
class LocalBookWithM2M(Model):
|
||||
author = ForeignKey(Author)
|
||||
author = ForeignKey(Author, CASCADE)
|
||||
title = CharField(max_length=100, db_index=True)
|
||||
pub_date = DateTimeField()
|
||||
tags = M2MFieldClass("TagM2MTest", related_name="books")
|
||||
@@ -937,8 +938,8 @@ class SchemaTests(TransactionTestCase):
|
||||
Tests M2M fields on models during creation with through models
|
||||
"""
|
||||
class LocalTagThrough(Model):
|
||||
book = ForeignKey("schema.LocalBookWithM2MThrough")
|
||||
tag = ForeignKey("schema.TagM2MTest")
|
||||
book = ForeignKey("schema.LocalBookWithM2MThrough", CASCADE)
|
||||
tag = ForeignKey("schema.TagM2MTest", CASCADE)
|
||||
|
||||
class Meta:
|
||||
app_label = 'schema'
|
||||
@@ -1026,8 +1027,8 @@ class SchemaTests(TransactionTestCase):
|
||||
Tests altering M2Ms with explicit through models (should no-op)
|
||||
"""
|
||||
class LocalAuthorTag(Model):
|
||||
author = ForeignKey("schema.LocalAuthorWithM2MThrough")
|
||||
tag = ForeignKey("schema.TagM2MTest")
|
||||
author = ForeignKey("schema.LocalAuthorWithM2MThrough", CASCADE)
|
||||
tag = ForeignKey("schema.TagM2MTest", CASCADE)
|
||||
|
||||
class Meta:
|
||||
app_label = 'schema'
|
||||
@@ -1073,7 +1074,7 @@ class SchemaTests(TransactionTestCase):
|
||||
Tests repointing M2M fields
|
||||
"""
|
||||
class LocalBookWithM2M(Model):
|
||||
author = ForeignKey(Author)
|
||||
author = ForeignKey(Author, CASCADE)
|
||||
title = CharField(max_length=100, db_index=True)
|
||||
pub_date = DateTimeField()
|
||||
tags = M2MFieldClass("TagM2MTest", related_name="books")
|
||||
@@ -1264,7 +1265,7 @@ class SchemaTests(TransactionTestCase):
|
||||
with connection.schema_editor() as editor:
|
||||
editor.create_model(Author)
|
||||
editor.create_model(BookWithoutAuthor)
|
||||
new_field = ForeignKey(Author)
|
||||
new_field = ForeignKey(Author, CASCADE)
|
||||
new_field.set_attributes_from_name('author')
|
||||
editor.add_field(BookWithoutAuthor, new_field)
|
||||
# Ensure the fields aren't unique to begin with
|
||||
@@ -1502,7 +1503,7 @@ class SchemaTests(TransactionTestCase):
|
||||
editor.create_model(AuthorWithEvenLongerName)
|
||||
editor.create_model(BookWithLongName)
|
||||
# Add a second FK, this would fail due to long ref name before the fix
|
||||
new_field = ForeignKey(AuthorWithEvenLongerName, related_name="something")
|
||||
new_field = ForeignKey(AuthorWithEvenLongerName, CASCADE, related_name="something")
|
||||
new_field.set_attributes_from_name("author_other_really_long_named_i_mean_so_long_fk")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.add_field(BookWithLongName, new_field)
|
||||
@@ -1511,7 +1512,7 @@ class SchemaTests(TransactionTestCase):
|
||||
with connection.schema_editor() as editor:
|
||||
editor.create_model(BookForeignObj)
|
||||
|
||||
new_field = ForeignObject(Author, from_fields=['author_id'], to_fields=['id'])
|
||||
new_field = ForeignObject(Author, on_delete=CASCADE, from_fields=['author_id'], to_fields=['id'])
|
||||
new_field.set_attributes_from_name('author')
|
||||
with connection.schema_editor() as editor:
|
||||
editor.add_field(BookForeignObj, new_field)
|
||||
@@ -1587,7 +1588,7 @@ class SchemaTests(TransactionTestCase):
|
||||
"to_column": editor.quote_name(model._meta.auto_field.column),
|
||||
}
|
||||
)
|
||||
editor.alter_field(model, get_field(Author, field_class=ForeignKey), field)
|
||||
editor.alter_field(model, get_field(Author, CASCADE, field_class=ForeignKey), field)
|
||||
|
||||
def test_add_field_use_effective_default(self):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user