Using the new intermediaries on many-to-many models breaks the functionality of manage.py reset for me.
More specifically, if I create a project "testing" and an application "tests", and put the following models in:
class Band(models.Model):
name = models.CharField(max_length=100)
class Musician(models.Model):
name = models.CharField(max_length=100)
bands = models.ManyToManyField(Band, through='Membership')
class Membership(models.Model):
band = models.ForeignKey(Band)
musician = models.ForeignKey(Musician)
join_date = models.DateField()
after syncdb'ing, if I then try "manage.py reset tests", I get an error message. Looking at "manage.py sqlclear tests", I get the following output:
BEGIN;
DROP TABLE "tests_membership";
DROP TABLE "tests_membership";
DROP TABLE "tests_musician";
DROP TABLE "tests_band";
COMMIT;
This duplication comes from django.core.management.sql.sql_delete, because said function outputs the drop statement for all app models and then for all many-to-many tables. The fix is simple: switch the skip-this-relation condition from checking if the relation is a generic relation to checking the new .creates_table attribute. A patch which does this is attached.