Wie schreibe ich eine Migration, um den Primärschlüssel des Modells mit ManyToManyField zu ändern?

Ich habe einUserProfile Modell, das auf mein @ verweiUser Modell mit einemOneToOneField. Ich benutze auch daspost_save Signal zum automatischen Erstellen desUserProfile wenn der Benutzer angelegt wird. Dies funktioniert hervorragend, außer wenn ein Benutzer über den Administrator erstellt wird (wo ich eine Inline verwende), wenn ich eine Fehlermeldung über das Duplizieren eines Profils erhalte.Diese Antwort empfiehlt, den Primärschlüssel auf das OneToOneField zu setzen, das sich auf Benutzer @ bezieh.

So vorher:

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    # ...
    subjects = models.ManyToManyField(Subject, null=True, blank=True)

Nac

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True)
    # ...
    subjects = models.ManyToManyField(Subject, null=True, blank=True)

Ich versuche das mit den Migrationen in Django 1.7 zu machen, aber das Leben wird durch die Tatsache kompliziert, dass das Profil eine Anzahl von @ haManyToManyField - so beziehen sie sich alle auf dasid Feld desUserProfile model. @ Verwendmakemigrations erstellt die Migrationen, um den Benutzer zum Primärschlüssel zu machen und das alte ID-Feld zu löschen, ignoriert jedoch ManyToManyField.

Ich gehe derzeit ein Kaninchenbau mit vielenRunSQL -Anweisungen in der Migration zum Ändern der Durch-Tabelle für dasManyToManyField. Ich habe gerade einen anderen Fehler gefunden, bei dem der Name der Einschränkung in einer Tabelle nicht mit der anderen identisch ist.

So meine Frage ist: gibt es eine Methode in Django-Migrationen, die die Arbeit des Änderns der Durch-Tabelle erledigt, so dass sie auf den neuen Primärschlüssel verweist und alle Einschränkungen, Schlüssel usw. aktualisiert? Wenn nicht, wie geht man am besten mit dieser Situation um?

Ich benutze Django 1.7 mit MySQL.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage