Fixed #29559 -- Fixed TransactionTestCase.reset_sequences for auto-created m2m through models.

This commit is contained in:
Oliver Sauder 2018-07-11 10:18:41 +02:00 committed by Tim Graham
parent 4d98b9d729
commit a07a49ee32
3 changed files with 5 additions and 1 deletions

View File

@ -127,7 +127,7 @@ class BaseDatabaseIntrospection:
for f in model._meta.local_many_to_many:
# If this is an m2m using an intermediate table,
# 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_list.extend(sequence or [{'table': f.m2m_db_table(), 'column': None}])
return sequence_list

View File

@ -4,6 +4,7 @@ from django.db import models
class Person(models.Model):
first_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.

View File

@ -342,6 +342,9 @@ class AutoIncrementResetTest(TransactionTestCase):
# Regular model
p = Person.objects.create(first_name='Jack', last_name='Smith')
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
b = B.objects.create()
t = Through.objects.create(person=p, b=b)