Commit 79af110d authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.0.X] Fixed #11107 -- Corrected the generation of sequence reset SQL for m2m...

[1.0.X] Fixed #11107 -- Corrected the generation of sequence reset SQL for m2m fields with an intermediate model. Thanks to J Clifford Dyer for the report and fix.

Merge of r11215 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@11216 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent aa0be5b7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ answer newbie questions, and generally made Django that much better:
    Andrew Durdin <adurdin@gmail.com>
    dusk@woofle.net
    Andy Dustman <farcepest@gmail.com>
    J. Clifford Dyer <jcd@unc.edu>
    Clint Ecker
    Nick Efford <nick@efford.org>
    eibaan@gmail.com
+7 −6
Original line number Diff line number Diff line
@@ -205,6 +205,7 @@ WHEN (new.%(col_name)s IS NULL)
                    # continue to loop
                    break
            for f in model._meta.many_to_many:
                if not f.rel.through:
                    table_name = self.quote_name(f.m2m_db_table())
                    sequence_name = get_sequence_name(f.m2m_db_table())
                    column_name = self.quote_name('id')
+9 −8
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ class DatabaseOperations(BaseDatabaseOperations):
                        style.SQL_TABLE(qn(model._meta.db_table))))
                    break # Only one AutoField is allowed per model, so don't bother continuing.
            for f in model._meta.many_to_many:
                if not f.rel.through:
                    output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
                        (style.SQL_KEYWORD('SELECT'),
                        style.SQL_FIELD(qn('%s_id_seq' % f.m2m_db_table())),
+34 −0
Original line number Diff line number Diff line
[
    {
        "pk": "1",
        "model": "m2m_through_regress.person",
        "fields": {
            "name": "Guido"
        }
    },
    {
        "pk": "1",
        "model": "auth.user",
        "fields": {
             "username": "Guido",
             "email": "bdfl@python.org",
             "password": "abcde"
        }
    },
    {
        "pk": "1",
        "model": "m2m_through_regress.group",
        "fields": {
            "name": "Python Core Group"
        }
    },
    {
        "pk": "1",
        "model": "m2m_through_regress.usermembership",
        "fields": {
            "user": "1",
            "group": "1",
            "price": "100"
        }
    }
]
 No newline at end of file
+10 −0
Original line number Diff line number Diff line
@@ -12,7 +12,9 @@ class Membership(models.Model):
    def __unicode__(self):
        return "%s is a member of %s" % (self.person.name, self.group.name)

# using custom id column to test ticket #11107
class UserMembership(models.Model):
    id = models.AutoField(db_column='usermembership_id', primary_key=True)
    user = models.ForeignKey(User)
    group = models.ForeignKey('Group')
    price = models.IntegerField(default=100)
@@ -196,4 +198,12 @@ doing a join.
# Flush the database, just to make sure we can.
>>> management.call_command('flush', verbosity=0, interactive=False)

## Regression test for #11107
Ensure that sequences on m2m_through tables are being created for the through
model, not for a phantom auto-generated m2m table.

>>> management.call_command('loaddata', 'm2m_through', verbosity=0)
>>> management.call_command('dumpdata', 'm2m_through_regress', format='json')
[{"pk": 1, "model": "m2m_through_regress.usermembership", "fields": {"price": 100, "group": 1, "user": 1}}, {"pk": 1, "model": "m2m_through_regress.person", "fields": {"name": "Guido"}}, {"pk": 1, "model": "m2m_through_regress.group", "fields": {"name": "Python Core Group"}}]

"""}