Opened 16 years ago
Closed 16 years ago
#8053 closed (fixed)
m2ms with intermediaries break manage.py reset
Reported by: | Dougal Sutherland | Owned by: | nobody |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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.
Attachments (1)
Change History (2)
by , 16 years ago
Attachment: | patch.diff added |
---|
comment:1 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
(In [8157]) Fixed #8053 -- Corrected a bug with reset and m2m intermediate tables. Thanks to d00gs for the report and fix.