2015-10-28 25 views
8

W mojej aplikacji django (django 1.8) używam dwóch baz danych, jednej "default", która jest MySQL, i kolejnej, która jest niechcianą bazą danych tylko do odczytu. mam dwa modele, które uzyskują dostęp do tej bazy danych, i chciałbym, aby wykluczyć te dwa modele na stałe na podstawie danych i migracje schematu:django: wykluczyć modele z migracji

  • makemigrations nigdy nie powinien wykryć wszelkie zmiany i tworzyć migracje dla nich
  • migrate nigdy nie powinien narzekać na brak migracje dla tej aplikacji

dotychczas próbowałem różnych rzeczy, wszystko bez powodzenia:

  • używany Meta opcję managed=False w obu modelach
  • dodał allow_migrate metody do mojego routera, która zwraca False dla obu modeli

Czy ktoś ma przykład jak ten scenariusz można osiągnąć? Dzięki za pomoc!

+10

Zazwyczaj 'udało = FALSE jest droga. Z czym jest problem? – Ivan

+0

zawierają część kodu wykonaną również dlatego, że jak @Ivan sugeruje, że jest to sposób –

+0

Wierzę, że ten post odpowiada na twoje pytanie: http://stackoverflow.com/questions/33820715/how-to-disable-migration-from-one -model-of-an-app-in-django –

Odpowiedz

1

Dotychczas Próbowałem różnych rzeczy, wszystko bez powodzenia:

  • wykorzystywane zarządzaną = False Meta opcję w obu modelach

To opcja (the managed = False atrybut w opcjach meta modelu) wydaje się spełniać wymagania.

Jeśli nie, należy rozwinąć pytanie, aby dokładnie powiedzieć, co jest wyjątkowe w modelu, który nie spełnia swojej roli.

0

Myślałem, że mam problem z makemigrations. Udaje, że wykonuje migrację na modelu managed = False, ale nie wygenerował kodu SQL dla tego modelu

Oto mój przykład, model Smdocumets niezarządzany i nie wygenerowano kodu SQL.

python manage.py makemigrations

Migrations for 'monitor': 
    monitor\migrations\0005_auto_20171102_1125.py 
    - Create model Smdocuments 
    - Add field sid to db 
    - Alter field name on db 

python manage.py monitora sqlmigrate 0005

BEGIN; 
-- 
-- Create model Smdocuments 
-- 
-- 
-- Add field sid to db 
-- 
ALTER TABLE "monitor_db" RENAME TO "monitor_db__old"; 
...