Opened 10 years ago

Closed 9 years ago

Last modified 8 years ago

#129 closed defect (fixed)

Multiple ManyToManyField fields with same "to" reference tries to create duplicate tables

Reported by: jason@… Owned by: adrian
Component: Metasystem Version:
Severity: normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

Revsion 257 added support for adding multiple ManyToManyField fields with the same "to" class on the same class. I've tried adding two fields where one has an explicit rel_name option but running "django-admin.py sql myapp" is showing two CREATE TABLE statements with the same table name.

I think I've tracked the problem down to the get_m2m_db_table method in the ManyToManyField class in core/meta.py but I don't understand the code base enough yet to try to fix it.

It looks like the code is returning the name as myapp_fromname_toname but I'd expect the name of the many-to-many table to be myapp_relname when the rel_name option is specified.

I'm using the MySQL database engine but I don't think that has any bearing on this problem.

Change History (5)

comment:1 Changed 10 years ago by adrian

  • Resolution set to worksforme
  • Status changed from new to closed

The docs are sketchy on this, but the solution is to set rel_name and related_name.

Example:

        meta.ManyToManyField(Category, verbose_name="Categories to include"),
        meta.ManyToManyField(Category, name="excluded_categories", rel_name="excluded_category", related_name='excluded_section', verbose_name="Categories to exclude"),

comment:2 Changed 10 years ago by jason@…

  • Resolution worksforme deleted
  • Status changed from closed to reopened

Using your example, I was able to get it to work. Setting rel_name and related_name doesn't have any effect on the generated table name. Setting name does have an affect on the table name, though.

I reopened the ticket just to confirm that this is what you intended since it conflicts with your comment.

comment:3 Changed 10 years ago by adrian

  • Status changed from reopened to new

comment:4 Changed 10 years ago by adrian

  • Status changed from new to assigned

comment:5 Changed 9 years ago by adrian

  • Resolution set to fixed
  • Status changed from assigned to closed

I believe this is fixed in the new trunk.

Note: See TracTickets for help on using tickets.
Back to Top