I to wszystko, co się działo u Ciebie ma sens :)
Tak działają migracje. Pozwól, że nieco się rozpiszę, aby podać stosowny przykład, drogi czytelniku. A innych czytelników poproszę o skorygowanie myśli, bo mogę sypnąć czymś niewłasciwym, piszę z pamięci, dawno nie używałem Django.
Wyobraź sobie, że masz model Firma z polem "name". Tworzysz migrację. w Ty momencie w tabeli w bazie mamy tylko owo pole "name".
Mając taki model, tworzysz sobie swój pierwszy wpis w bazie: Company(name="Killer Bees") i wszystko gra.
Teraz wpadasz na pomysł, aby dodać owo pole - nip. Zatem dodajesz nowe pole "nip" do modelu, które to pole domyślnie jest wymagane (bo nie podałeś parametrów null=True) oraz nie ma domyślnej wartości (bo nie podałeś default="xxx")
Zapisujesz pliki i wywołujesz "makemigrations", które to ma zaktualizować schemat bazy poprzez dodanie nowej kolumny "nip" do tabeli "companies"...
Ale, ale! Mamy problem!
Co się stanie z tą firmą "Killer Bees", którą utworzyliśmy parę linijek wyżej? Problem mamy taki, że my chcemy dodać nową kolumnę do tabeli, która nie może być NULL (wspomniałem powyżej), ale firma "Killer Bees" już istnieje w tej tabeli i jeśli dodamy taką kolumnę, to ona automatycznie będzie właśnie miała wartość NULL, no bo nie daliśmy jej domyślnej wartości..
Dlatego właśnie skrypt migracji podpowiada 2 opcje, które możesz zrobić.
1) podanie konkretnej wartości (np. wiesz, że każda istniejąca już firma powinna mieć w nowododanym polu wartość "3") - u Ciebie powinno pomóc np podanie tam wartości "0" i wiedziałbyś wtedy, że każda firma z nipem równym "0" wymaga aktualizacji danych.
2) przerwać migrację i dodać wartość domyślną - tutaj własnie chodzi o to zdefiniowanie pola z podaniem default="XXX", gdzie "XXX" u Ciebie musiałoby być liczbą, no bo dodajesz pole INT. Dlatego nie zadziałały nasze poprzednie podpowiedzi.
Miej na uwadze, że oba rozwiązania są podobne, jednak działają inaczej - drugie automatycznie ustawia tę domyślną wartość, jeśli Ty wyraźnie nie podasz innej podczas tworzenia Firmy. Zatem walidacja formularza może być bardziej uciążliwa, bo pole zostanie wypełnione "defaultem", a Ty chciałeś mieć je wymagane w formularzu..
A teraz bonus - dlaczego to zadziałało, kiedy usunąłeś wszystko i zacząłeś od nowa? Bo Django tworzyło wtedy dopiero PIERWSZĄ migrację i system jest pewny, że w bazie nie istnieje jeszcze żadna firma, która mogła by mieć to pole puste. Tyle.
To chyba wszystko.
Jeśli ktoś ma siłę przeczytać i poprawić - zapraszam ;)