Więc jakiś czas kilka migracje po moim pierwszym, postanowiłem chciałem zawierać następujące pola:Django 1.8 Migracje. Dodawanie DateTimeField po utworzeniu db. Najlepsze praktyki?
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
do jednego z moich modeli. Kiedy makemigrations
dał mi You are trying to add a non-nullable field 'created' to episode without a default; we can't do that (the database needs something to populate existing rows).
Więc potem zmienił je na
created = models.DateTimeField(auto_now_add=True, default=datetime.now)
Po próbie makemigrations
ponownie, to powiedział, że at_api.Episode.modified: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.
Dobra, więc po prostu poszedł do przodu i wyjętym auto_now_add
created = models.DateTimeField(default=datetime.now)
mogłem teraz makemigrations
bez żadnych problemów. Później usunąłem default=datetime.now
i zastąpiłem go auto_now_add=True
i ponownie wykonałem migrację bez żadnych problemów. Jednak nie mogę oprzeć się wrażeniu, że nie jest to najlepszy sposób robienia rzeczy. Czuję, że coś może pójść nie tak później w projekcie.
Tak, Django nie pytaj mnie o jednorazowej wartości dla istniejących wierszy. Próbowałem 'datetime.now', ale nie działa. Ale chyba wszystko w porządku? Czy typowe jest ustawienie 'null = True' jako" symbolu zastępczego "dla istniejących wartości wierszy, a następnie usunięcie go później w celu zastąpienia czymś innym? – pyramidface
'datetime.now()' zadziałałoby (zanotuj nawiasy - chcesz * wywołać * funkcję i użyć jej wartości zwracanej). Dodałeś i usunąłeś 'null = True' w bardziej skomplikowanych przypadkach, w których chcesz przypisać inną wartość do różnych wierszy. Na przykład, powiedzmy, że masz rzeczywistą datę utworzenia przechowywaną gdzieś w pliku. Napiszesz migrację danych, która dla każdego wiersza wyszuka datę w pliku, a następnie umieści go w bazie danych. Następnie możesz usunąć 'null = True' i ponownie przeprowadzić migrację. –
Ahh OK, będę o tym pamiętać w przyszłych projektach. Dzięki!! – pyramidface