diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py index adc245bb75..9fd2550185 100644 --- a/django/contrib/contenttypes/generic.py +++ b/django/contrib/contenttypes/generic.py @@ -193,9 +193,9 @@ class ReverseGenericRelatedObjectsDescriptor(object): rel_model = self.field.rel.to superclass = rel_model._default_manager.__class__ RelatedManager = create_generic_related_manager(superclass) - + qn = connection.ops.quote_name - + manager = RelatedManager( model = rel_model, instance = instance, @@ -285,6 +285,7 @@ class GenericRel(ManyToManyRel): self.limit_choices_to = limit_choices_to or {} self.symmetrical = symmetrical self.multiple = True + self.through = None class BaseGenericInlineFormSet(BaseModelFormSet): """ diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 98360d081d..579bf80aaf 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -530,7 +530,10 @@ class BaseDatabaseIntrospection(object): break # Only one AutoField is allowed per model, so don't bother continuing. for f in model._meta.local_many_to_many: - sequence_list.append({'table': f.m2m_db_table(), 'column': None}) + # If this is an m2m using an intermediate table, + # we don't need to reset the sequence. + if f.rel.through is None: + sequence_list.append({'table': f.m2m_db_table(), 'column': None}) return sequence_list diff --git a/tests/regressiontests/m2m_through_regress/models.py b/tests/regressiontests/m2m_through_regress/models.py index b4135032a9..8594f19dee 100644 --- a/tests/regressiontests/m2m_through_regress/models.py +++ b/tests/regressiontests/m2m_through_regress/models.py @@ -35,6 +35,22 @@ class Group(models.Model): def __unicode__(self): return self.name +# A set of models that use an non-abstract inherited model as the 'through' model. +class A(models.Model): + a_text = models.CharField(max_length=20) + +class ThroughBase(models.Model): + a = models.ForeignKey(A) + b = models.ForeignKey('B') + +class Through(ThroughBase): + extra = models.CharField(max_length=20) + +class B(models.Model): + b_text = models.CharField(max_length=20) + a_list = models.ManyToManyField(A, through=Through) + + __test__ = {'API_TESTS':""" # Create some dummy data >>> bob = Person.objects.create(name='Bob') @@ -176,4 +192,8 @@ doing a join. >>> bob.group_set.filter(membership__price=50) [] +## Regression test for #9804 +# Flush the database, just to make sure we can. +>>> management.call_command('flush', verbosity=0, interactive=False) + """}