Migrieren Sie das Django-Modell zur unique_together-Einschränkung

8

Ich habe ein Modell mit drei Feldern

%Vor%

Ich möchte eine eindeutige Einschränkung zwischen diesen Feldern erzwingen und fand djangos unique_together , was die Lösung zu sein scheint. Ich habe jedoch bereits eine vorhandene Datenbank, und es gibt viele Duplikate. Ich weiß, da unique_together auf der Datenbankebene funktioniert, muss ich die Zeilen eindeutig identifizieren und dann eine Migration versuchen.

Gibt es eine gute Möglichkeit, Duplikate zu entfernen (wo ein Duplikat dasselbe hat (A, B, C)), damit ich die Migration ausführen kann, um die unique_together -Begrenzung zu erhalten?

    
jkeesh 24.11.2011, 07:35
quelle

1 Antwort

22

Wenn Sie sich freuen, eines der Duplikate willkürlich zu wählen, könnte das folgende hilfreich sein. Vielleicht nicht die effizienteste, aber einfach genug und ich denke, Sie müssen nur einmal laufen. Bitte vergewissern Sie sich, dass alles an einigen Testdaten funktioniert, falls ich etwas Dummes gemacht habe, da Sie gerade dabei sind, eine Menge Daten zu löschen.

Zuerst finden wir Gruppen von Objekten, die Duplikate bilden. Wähle für jede Gruppe (willkürlich) einen "Meister", den wir behalten werden. Unsere gewählte Methode ist diejenige mit dem niedrigsten pk

auszuwählen %Vor%

Wir schleifen dann jeden Master und löschen alle seine Duplikate

%Vor%     
second 24.11.2011, 09:39
quelle