2010-11-12 10 views
11

Pracuję z projektem systemu operacyjnego, który używa adresu Południowa do migracji bazy danych. Buduję nową bazę danych od zera i chcę się upewnić, że Południe jest skonfigurowane, więc mogę łatwo zaktualizować bazę danych w przyszłości.Jak utworzyć nową bazę danych dla istniejącej aplikacji przy użyciu Django South i ustawić wartości domyślne?

Wydaje proces ten powinien być:

  1. tworzyć db
  2. syncdb
  3. migracji

Jednak przy próbie migracji baz danych, jeden z wcześniejszych migracji (migracja 0004 i przechodzą na 0009) zgłasza wyjątek:

ValueError: You cannot add a null=False column without a default value. 

Nie rozumiem, jak dodać wartość domyślną do migracji 0004, więc ten wyjątek nie zostanie zgłoszony.

Migracja nie musi być przeprowadzana, ponieważ baza danych jest pusta.

Jednak south_migrationhistory musi zawierać listę wszystkich migracji i kiedy zostały zastosowane.

Próbowałem zhackować i ręcznie dodać migrację 0009 do bazy danych, ale spowodował to kolejny błąd, ponieważ migracje pośrednie nie zostały uruchomione. Próbowałem również dodać pole do bazy danych, aby sprawdzić, czy mógłbym się dowiedzieć, jak wyglądałaby kolumna add_column z domyślną wartością 0. Format wygląda zupełnie inaczej niż te starsze migracje.

Oto 2 różne wersje składni add_column:

#0004 syntax: 
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size']) 
#0009 syntax: 
syntax db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) 

Więc zgaduję nastąpiła zmiana w kodzie Południowej pomiędzy 0004, gdy został stworzony i dzisiaj.

Czy istnieje sposób na zbudowanie bazy danych za pomocą syncdb, a następnie jakoś zaktualizować south_migrationhistory bez uruchamiania manage.py migrować?

Jeśli masz już istniejącą aplikację z migracjami południowymi, w jaki sposób zbudujesz nową bazę danych od podstaw?

Nie mogę przeprowadzić migracji, ponieważ nie ma domyślnego zestawu w polu liczby całkowitej. Jak ustawić domyślną starszą migrację? Pole już nie istnieje.

składnie usiłował:

db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'], {'default': 0}) 
#throws ValueError: You cannot add a null=False column without a default value. 
db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) 
#throws AttributeError: Migration instance has no attribute 'gf' 

Używam Południowo-0.7.2-py2.7.jajko

Odpowiedz

16

Andrew Godwin dały odpowiedź:

Tak, przeznaczenie:

./manage.py syncdb --all 

następnie:

./manage.py migrate --fake 

Będzie to jednak również pominąć wszelkie migracje, które dodają w danych do Baza danych.

Powiązane problemy