mirror of https://github.com/django/django.git
Fixed #33305 -- Fixed autodetector crash for ForeignKey with hardcoded "to" attribute.
Co-authored-by: Simon Charette <charette.s@gmail.com>
This commit is contained in:
parent
a7e7043c87
commit
a0ed3cfad1
|
@ -96,7 +96,7 @@ class MigrationAutodetector:
|
||||||
for name, field in sorted(fields.items()):
|
for name, field in sorted(fields.items()):
|
||||||
deconstruction = self.deep_deconstruct(field)
|
deconstruction = self.deep_deconstruct(field)
|
||||||
if field.remote_field and field.remote_field.model:
|
if field.remote_field and field.remote_field.model:
|
||||||
del deconstruction[2]['to']
|
deconstruction[2].pop('to', None)
|
||||||
fields_def.append(deconstruction)
|
fields_def.append(deconstruction)
|
||||||
return fields_def
|
return fields_def
|
||||||
|
|
||||||
|
|
|
@ -2834,6 +2834,28 @@ class AutodetectorTests(TestCase):
|
||||||
expected_number,
|
expected_number,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_add_custom_fk_with_hardcoded_to(self):
|
||||||
|
class HardcodedForeignKey(models.ForeignKey):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['to'] = 'testapp.Author'
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def deconstruct(self):
|
||||||
|
name, path, args, kwargs = super().deconstruct()
|
||||||
|
del kwargs['to']
|
||||||
|
return name, path, args, kwargs
|
||||||
|
|
||||||
|
book_hardcoded_fk_to = ModelState('testapp', 'Book', [
|
||||||
|
('author', HardcodedForeignKey(on_delete=models.CASCADE)),
|
||||||
|
])
|
||||||
|
changes = self.get_changes(
|
||||||
|
[self.author_empty],
|
||||||
|
[self.author_empty, book_hardcoded_fk_to],
|
||||||
|
)
|
||||||
|
self.assertNumberMigrations(changes, 'testapp', 1)
|
||||||
|
self.assertOperationTypes(changes, 'testapp', 0, ['CreateModel'])
|
||||||
|
self.assertOperationAttributes(changes, 'testapp', 0, 0, name='Book')
|
||||||
|
|
||||||
|
|
||||||
class MigrationSuggestNameTests(SimpleTestCase):
|
class MigrationSuggestNameTests(SimpleTestCase):
|
||||||
def test_no_operations(self):
|
def test_no_operations(self):
|
||||||
|
|
Loading…
Reference in New Issue