Tworzę niektóre dynamiczne modele Django w mojej aplikacji i wszystko wydaje się działać zgodnie z oczekiwaniami, z wyjątkiem systemu migracji.Django 1.7 - makewigracje powodujące migrację do niezarządzanego modelu
Jeśli utworzę dynamiczny model Django i ustawię managed = False, komenda Django makemigrations
nadal generuje migrację dla tego nowego modelu. Migracja wygląda mniej więcej tak:
class Migration(migrations.Migration):
dependencies = [
('atom', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]
Jeśli nie tworzyć migracji, kiedy biegnę python manage.py migrate
, widzę następujący komunikat (w dużych przerażające czerwonymi literami):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
Czy czy istnieje sposób, aby powiedzieć systemowi migracji w Django 1.7, aby zignorował niezarządzane modele razem? a może ustawienie migrations = False
w klasie Meta modeli?
UPDATE: o wyjaśnienia, używam metody do tworzenia moje dynamiczne modele podobne do tych, które opisano w następujących miejscach:
- http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
- https://code.djangoproject.com/wiki/DynamicModels
ten Metoda jest świetna do generowania modeli dynamicznych na podstawie informacji przechowywanych w moich modelach konfiguracji (https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach). Musiałem zarejestrować sygnał, aby wyczyścić pamięć podręczną modelu django, aby przechwytywać zmiany w modelach, gdy instancja konfiguracji została zmieniona, ale wszystko wydaje się działać dobrze, z wyjątkiem faktu, że generowane są migracje dla tych modeli. Jeśli usuniemy jedną z konfiguracji, a model zostanie usunięty z pamięci podręcznej Django, migracja będzie musiała zostać zaktualizowana ponownie, usuwając model, który nie powinien mieć na uwadze.
Te modele dynamiczne nie są specjalnie używane w aplikacji. Nie gdzie w kodzie odwołuję się do modelu książki (z powyższego przykładu). Są generowane w środowisku wykonawczym i wykorzystywane do odczytywania informacji ze starszych tabel, do których zapewniają dostęp.
Ale czy migracja rzeczywiście powoduje problem? Oznacza to, że po uruchomieniu polecenia "migrate" błędnie tworzy modele w bazie danych? Jeśli nie, naprawdę nie ma problemu. System migracji dotyczy nie tylko zmian na poziomie bazy danych, stara się stworzyć możliwie dokładny obraz modeli w pamięci, jak to tylko możliwe. –
To prawda. Migracje nie powodują problemu. Jednak w dynamicznym systemie, gdzie przez cały czas istnieją potencjalnie nowe modele. Byłoby miło, gdybym mógł wskazać systemowi migracji, że nie musi się martwić o te konkretne modele. – chadgh
Czy możesz podać nam więcej informacji na temat generowania modeli dynamicznych? Głównie jakie dane są wymagane do ich dynamicznego generowania. –