Niedawno zaktualizowałem swój model, dodałem do niego BooleanField, ale kiedy to zrobię python manage.py syncdb, nie dodaje nowego pola do bazy danych dla modelu. Jak mogę to naprawić?
Niedawno zaktualizowałem swój model, dodałem do niego BooleanField, ale kiedy to zrobię python manage.py syncdb, nie dodaje nowego pola do bazy danych dla modelu. Jak mogę to naprawić?
Odpowiedzi:
Django ma wbudowaną obsługę migracji - zajrzyj do dokumentacji .
Django nie obsługuje migracji po wyjęciu z pudełka. Istnieje jednak podłączalna aplikacja dla Django, która robi dokładnie to i działa świetnie. Nazywa się South .
Obecnie Django nie robi tego automatycznie. Twoje opcje to:
python manage.py sql (appname), znajdź dodany wiersz dla pola i dodaj go ręcznie za pomocą alter tablepolecenia SQL. (Umożliwi to również wybranie wartości pola dla bieżących rekordów).Jak zasugerowano w pierwszej odpowiedzi, spróbowałem użyć South i po godzinie frustracji z powodu niejasnych błędów migracji zdecydowałem się zamiast tego wybrać Django Evolution .
Myślę, że łatwiej jest zacząć od South i działało idealnie, gdy pierwszy raz pisałem ./manage.py evolve --hint --execute, więc jestem z niego zadowolony.
Havent używał django od jakiegoś czasu, ale wydaje mi się, że pamiętam, że syncdb wykonuje zmiany poleceń w tabelach db. musisz upuścić tabelę, a następnie uruchomić ją ponownie i utworzy ponownie.
edycja: przepraszam NIE wprowadza zmian.
alter tablepoleceń, tylko uruchamia create tablepolecenia.
W django 1.6
Najpierw biegaliśmy - python manage.py sql <app name>
Wtedy musimy biec - python manage.py syncdb
Jeśli uruchamiasz Django z Apache i MySQL, zrestartuj Apache po wykonaniu migracji z makemigrations .