Zaktualizowałem z Django 1.6.5 (z migracjami południowymi) do Django 1.8. Śledzę z instrukcjami tutaj: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-southAktualizacja z Django 1.6 (z południem) do 1.8 nie modyfikuje "last_login" w tabeli użytkownika
Więc usunąć South, usunąć moje wcześniejsze migracje i uruchomić python manage.py makemigrations
który tworzy nowy plik migracji. Następnie uruchamiam python manage.py migrate --fake-initial
, aby sfałszować początkową migrację. Następnie uruchamiam python manage.py migrate
.
Wszystko działa bez żadnych błędów.
Mam niestandardowy model użytkownika, który dziedziczy AbstractBaseUser
. W Django 1.8 wydaje się, że jest zmiana w polu last_login
, gdzie jest teraz w stanie zaakceptować wartość null
(https://docs.djangoproject.com/fr/1.8/ref/contrib/auth/#django.contrib.auth.models.User.last_login).
Problem polega na tym, że migracja nie zmienia pola last_login
w tabeli bazy danych, aby zaakceptować wartości puste. W rezultacie, gdy próbuję i zapisuję, otrzymuję IntegrityError
z informacją: (1048, "Column 'last_login' cannot be null")
.
Jak mogę rozwiązać ten problem? Czy muszę ręcznie zmienić pole w bazie danych, czy jest jakiś sposób, aby naprawić to za pomocą migracji?
Edit Kiedy biegnę python manage.py migrate --fake-initial
wyjście to: przebiegu migracje:
Rendering model states... DONE
Applying contenttypes.0001_initial... FAKED
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... FAKED
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying core.0001_initial... FAKED
Applying admin.0001_initial... FAKED
Applying sessions.0001_initial... FAKED
Jednak kiedy patrzę w bazie wciąż widzę user_last_login
jako nie-NULL.
Dziękuję za odpowiedź. Zrobiłem to już, w mojej edycji powyżej dodałem wyjście, które zawiera wiersz 'Applying auth.0005_alter_user_last_login_null ... OK'. Jeśli mam rację, jest to migracja, która spowoduje usunięcie ograniczenia nie zerowego, ale nie wydaje się działać. –
Musisz upewnić się, że początkowe migracje są zgodne ze schematem bazy danych. Ponieważ pominąłeś Django 1.7, musisz edytować automatycznie wygenerowaną migrację początkową dla aplikacji, która zawiera niestandardowy model użytkownika i usunąć atrybut 'null = True' z pola' last_login'. Następnie możesz wygenerować drugą migrację, która usunie ograniczenie NOT NULL. –
Jak usunąć ograniczenie NOT NULL? – diofeher