Support evolving unique_together.

Review Request #5098 — Created Dec. 12, 2013 and submitted


Django Evolution


Support evolving unique_together.

Django-Evolution has always recorded unique_together, but never
supported evolving it. If a project changed this value, it would be
ignored and never applied to the database, yet would be recorded.

This introduces a new ChangeMeta mutation that accepts changing a Meta
property. Currently, only unique_together is supported. The
unique_together property can be set to any value, and Django Evolution
will attempt to drop any old indexes it can find (if any exist) from the
old signature, and set up indexes for the new signature.

Projects should add a ChangeMeta for any models that have a
unique_together, to ensure that the proper value is used and recorded.

  • Unit tests pass for SQLite, MySQL, and Postgres, with Django 1.4 and 1.5.

  • Installed a Review Board 1.6.x site with Django Evolution 0.6.9 using MySQL.
    Then, with RB 2.0 and this patch, I checked evolve --hint. It listed evolutions
    for all the unique_together fields.

  • Added those evolution files and ran evolve --execute. Saw that they applied.

  • Also tested all this with my old database that I've carried over since 1.0 (and
    had newly stored unique_together fields but no actual indexes for them). No

Description From Last Updated

Should this be __repr__ instead?

  1. So I admit my knowledge of all of this is pretty limited, so I'm relying on your testing a lot.

    1. I'll admit, every change I do scares me, but I think this one works from my testing.

      With one exception, which I'll be working on tonight... Not a breakage, just if you have a stored unique_together that doesn't actually have matching entries in the database, and we add a ChangeMeta with that same unique_together (in an effort to fix up the database), it currently does nothing. I'd like it to add them to the database if missing. That can be a separate change though.

  2. django_evolution/ (Diff revision 1)
    Show all issues

    Should this be __repr__ instead?

    1. One may opt to go that route, but all the other ones use __str__, so I'm staying consistent. These are actually used to generate the hinted evolution.

  1. Ship It!
Review request changed