mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Fixed #12810 -- Added a check for clashing ManyToManyField.db_table names.
This commit is contained in:
parent
faeeb84edf
commit
0bce2f102c
3 changed files with 99 additions and 0 deletions
|
@ -761,3 +761,69 @@ class OtherModelTests(SimpleTestCase):
|
|||
'as an implicit link is deprecated.'
|
||||
)
|
||||
self.assertEqual(ParkingLot._meta.pk.name, 'parent')
|
||||
|
||||
def test_m2m_table_name_clash(self):
|
||||
class Foo(models.Model):
|
||||
bar = models.ManyToManyField('Bar', db_table='myapp_bar')
|
||||
|
||||
class Meta:
|
||||
db_table = 'myapp_foo'
|
||||
|
||||
class Bar(models.Model):
|
||||
class Meta:
|
||||
db_table = 'myapp_bar'
|
||||
|
||||
self.assertEqual(Foo.check(), [
|
||||
Error(
|
||||
"The field's intermediary table 'myapp_bar' clashes with the "
|
||||
"table name of 'invalid_models_tests.Bar'.",
|
||||
obj=Foo._meta.get_field('bar'),
|
||||
id='fields.E340',
|
||||
)
|
||||
])
|
||||
|
||||
def test_m2m_field_table_name_clash(self):
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
|
||||
class Bar(models.Model):
|
||||
foos = models.ManyToManyField(Foo, db_table='clash')
|
||||
|
||||
class Baz(models.Model):
|
||||
foos = models.ManyToManyField(Foo, db_table='clash')
|
||||
|
||||
self.assertEqual(Bar.check() + Baz.check(), [
|
||||
Error(
|
||||
"The field's intermediary table 'clash' clashes with the "
|
||||
"table name of 'invalid_models_tests.Baz.foos'.",
|
||||
obj=Bar._meta.get_field('foos'),
|
||||
id='fields.E340',
|
||||
),
|
||||
Error(
|
||||
"The field's intermediary table 'clash' clashes with the "
|
||||
"table name of 'invalid_models_tests.Bar.foos'.",
|
||||
obj=Baz._meta.get_field('foos'),
|
||||
id='fields.E340',
|
||||
)
|
||||
])
|
||||
|
||||
def test_m2m_autogenerated_table_name_clash(self):
|
||||
class Foo(models.Model):
|
||||
class Meta:
|
||||
db_table = 'bar_foos'
|
||||
|
||||
class Bar(models.Model):
|
||||
# The autogenerated `db_table` will be bar_foos.
|
||||
foos = models.ManyToManyField(Foo)
|
||||
|
||||
class Meta:
|
||||
db_table = 'bar'
|
||||
|
||||
self.assertEqual(Bar.check(), [
|
||||
Error(
|
||||
"The field's intermediary table 'bar_foos' clashes with the "
|
||||
"table name of 'invalid_models_tests.Foo'.",
|
||||
obj=Bar._meta.get_field('foos'),
|
||||
id='fields.E340',
|
||||
)
|
||||
])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue