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ć?
python
django
django-models
Hellnar
źródło
źródło
Odpowiedzi:
Od Django 1.7
Django ma wbudowaną obsługę migracji - zajrzyj do dokumentacji .
Dla Django 1.6 i wcześniejszych
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 .
źródło
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 table
polecenia SQL. (Umożliwi to również wybranie wartości pola dla bieżących rekordów).źródło
Wykonaj następujące kroki:
źródło
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.źródło
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.
źródło
alter table
poleceń, tylko uruchamiacreate table
polecenia.W django 1.6
Najpierw biegaliśmy -
python manage.py sql <app name>
Wtedy musimy biec -
python manage.py syncdb
źródło
Jeśli uruchamiasz Django z Apache i MySQL, zrestartuj Apache po wykonaniu migracji z makemigrations .
źródło