2012-01-13 22 views
12

Mam projekt Django, który rozpoczął się jako import poprzedniej bazy danych. Z tego powodu istnieje model z kompozytowym kluczem podstawowym. To działało tak długo, jak długo korzystałem tylko ze starszych danych, ale teraz chcę dodać nowe dane i utworzony przeze mnie formularz mówi mi, że próbuję wstawić zduplikowane dane, prawdopodobnie dlatego, że patrzy tylko na jedno z pól jako główny klucz.Dodawanie pola Autoinkrement do istniejącego modelu z Django South?

Teraz chcę zmienić model, aby używał klucza głównego, który automatycznie dodaje się do Django. Próbowałem usunąć atrybuty klucza głównego z pól i umieścić je w unique_together w wewnętrznej klasie Meta. Kiedy uruchomiłem schemamigration z południem, chciał dodać pole id zgodnie z oczekiwaniami, ale poprosiło o wartość domyślną.

Jak mogę określić, że Południe powinno przypisywać unikatowe klucze w pewien sposób, który jest uzasadniony dla pola autorekrecji? (tj. przypisać sekwencję [1 ... n] dowolnemu dowolnemu porządkowaniu rekordów)

Jeśli jest to niemożliwe, czy istnieje inny sposób osiągnięcia tego samego, najlepiej przy użyciu Django i południa?

Odpowiedz

5

I rozwiązać problem, który wymaga mi zrobić to z obejścia:

skopiowane dane z oryginalnej tabeli do tabeli tymczasowej w SQL z INSERT INTO... SELECT.... Następnie usunąłem oryginalną tabelę i odtworzyłem ją w polu autoreferencji. Następnie skopiowałem dane z powrotem do nowej tabeli z wartościami autoinkmentacji dodanymi automatycznie przez polecenie INSERT. W końcu wykonałem fałszywy ciąg migracji z Południa, aby tabele Południa były zgodne z nowym schematem.

Powiązane problemy