mirror of
https://github.com/django/django.git
synced 2025-04-18 06:14:37 +00:00
[1.7.x] Refs #24236 -- Added regression test for 3d4a826174b7a411a03be39725e60c940944a7fe
Thanks irc user ris for the report
This commit is contained in:
parent
1d85d057c3
commit
37b50db092
@ -52,3 +52,7 @@ class CustomManyToManyField(RelatedField):
|
||||
_get_m2m_attr = ManyToManyField.__dict__['_get_m2m_attr']
|
||||
_get_m2m_reverse_attr = ManyToManyField.__dict__['_get_m2m_reverse_attr']
|
||||
_get_m2m_db_table = ManyToManyField.__dict__['_get_m2m_db_table']
|
||||
|
||||
|
||||
class InheritedManyToManyField(ManyToManyField):
|
||||
pass
|
||||
|
@ -7,7 +7,7 @@ from django.db.models.fields import (BinaryField, BooleanField, CharField, Integ
|
||||
PositiveIntegerField, SlugField, TextField)
|
||||
from django.db.models.fields.related import ForeignKey, ManyToManyField, OneToOneField
|
||||
from django.db.transaction import atomic
|
||||
from .fields import CustomManyToManyField
|
||||
from .fields import CustomManyToManyField, InheritedManyToManyField
|
||||
from .models import (Author, AuthorWithDefaultHeight, AuthorWithM2M, Book, BookWithLongName,
|
||||
BookWithSlug, BookWithM2M, Tag, TagIndexed, TagM2MTest, TagUniqueRename,
|
||||
UniqueTest, Thing, TagThrough, BookWithM2MThrough, AuthorTag, AuthorWithM2MThrough,
|
||||
@ -1355,3 +1355,47 @@ class SchemaTests(TransactionTestCase):
|
||||
finally:
|
||||
# Cleanup model states
|
||||
AuthorWithM2M._meta.local_many_to_many.remove(new_field)
|
||||
|
||||
def test_inherited_manytomanyfield(self):
|
||||
"""
|
||||
#24104 - Schema editors should look for internal type of field
|
||||
"""
|
||||
# Create the tables
|
||||
with connection.schema_editor() as editor:
|
||||
editor.create_model(AuthorWithM2M)
|
||||
editor.create_model(TagM2MTest)
|
||||
# Create an M2M field
|
||||
new_field = InheritedManyToManyField("schema.TagM2MTest", related_name="authors")
|
||||
new_field.contribute_to_class(AuthorWithM2M, "tags")
|
||||
# Ensure there's no m2m table there
|
||||
self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through)
|
||||
try:
|
||||
# Add the field
|
||||
with connection.schema_editor() as editor:
|
||||
editor.add_field(
|
||||
AuthorWithM2M,
|
||||
new_field,
|
||||
)
|
||||
# Ensure there is now an m2m table there
|
||||
columns = self.column_classes(new_field.rel.through)
|
||||
self.assertEqual(columns['tagm2mtest_id'][0], "IntegerField")
|
||||
|
||||
# "Alter" the field. This should not rename the DB table to itself.
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(
|
||||
AuthorWithM2M,
|
||||
new_field,
|
||||
new_field,
|
||||
)
|
||||
|
||||
# Remove the M2M table again
|
||||
with connection.schema_editor() as editor:
|
||||
editor.remove_field(
|
||||
AuthorWithM2M,
|
||||
new_field,
|
||||
)
|
||||
# Ensure there's no m2m table there
|
||||
self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through)
|
||||
finally:
|
||||
# Cleanup model states
|
||||
AuthorWithM2M._meta.local_many_to_many.remove(new_field)
|
||||
|
Loading…
x
Reference in New Issue
Block a user