Fixed #29559 -- Fixed TransactionTestCase.reset_sequences for auto-created m2m through models.
This commit is contained in:
parent
4d98b9d729
commit
a07a49ee32
|
@ -127,7 +127,7 @@ class BaseDatabaseIntrospection:
|
||||||
for f in model._meta.local_many_to_many:
|
for f in model._meta.local_many_to_many:
|
||||||
# If this is an m2m using an intermediate table,
|
# If this is an m2m using an intermediate table,
|
||||||
# we don't need to reset the sequence.
|
# we don't need to reset the sequence.
|
||||||
if f.remote_field.through is None:
|
if f.remote_field.through._meta.auto_created:
|
||||||
sequence = self.get_sequences(cursor, f.m2m_db_table())
|
sequence = self.get_sequences(cursor, f.m2m_db_table())
|
||||||
sequence_list.extend(sequence or [{'table': f.m2m_db_table(), 'column': None}])
|
sequence_list.extend(sequence or [{'table': f.m2m_db_table(), 'column': None}])
|
||||||
return sequence_list
|
return sequence_list
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.db import models
|
||||||
class Person(models.Model):
|
class Person(models.Model):
|
||||||
first_name = models.CharField(max_length=20)
|
first_name = models.CharField(max_length=20)
|
||||||
last_name = models.CharField(max_length=20)
|
last_name = models.CharField(max_length=20)
|
||||||
|
friends = models.ManyToManyField('self')
|
||||||
|
|
||||||
|
|
||||||
# A set of models that use a non-abstract inherited 'through' model.
|
# A set of models that use a non-abstract inherited 'through' model.
|
||||||
|
|
|
@ -342,6 +342,9 @@ class AutoIncrementResetTest(TransactionTestCase):
|
||||||
# Regular model
|
# Regular model
|
||||||
p = Person.objects.create(first_name='Jack', last_name='Smith')
|
p = Person.objects.create(first_name='Jack', last_name='Smith')
|
||||||
self.assertEqual(p.pk, 1)
|
self.assertEqual(p.pk, 1)
|
||||||
|
# Auto-created many-to-many through model
|
||||||
|
p.friends.add(Person.objects.create(first_name='Jacky', last_name='Smith'))
|
||||||
|
self.assertEqual(p.friends.through.objects.first().pk, 1)
|
||||||
# Many-to-many through model
|
# Many-to-many through model
|
||||||
b = B.objects.create()
|
b = B.objects.create()
|
||||||
t = Through.objects.create(person=p, b=b)
|
t = Through.objects.create(person=p, b=b)
|
||||||
|
|
Loading…
Reference in New Issue