15

zrobiłem zmianę modelu zMigracja ManyToManyField null prawda, puste prawda, nie jest rozpoznawany

standard = models.ManyToManyField(Standard) 

do

standard = models.ManyToManyField(Standard, blank=True, null=True) 

Południowa schemamigration dla tej aplikacji nie rozpoznaje zmianę?

podobne do tego pytania, co jest bez odpowiedzi: South migrations and changes to many-to-may fields

+0

Co dokładnie mówi South, gdy próbujesz uruchomić './manage.py schemamigration yourapp --auto'? –

+0

Nie znaleziono żadnych zmian – npradeetw

+0

Jedyne, co mogę wymyślić, to to, że nie ratujesz 'models.py', ale bardzo w to wątpię. Przepraszam, nie mogę pomóc. –

Odpowiedz

28

To zachowanie jest poprawne: null nie robi nic na poziomie bazy danych na myśli, gdy używana z ManyToManyField. Wywołanie ManyToManyField powoduje utworzenie tabeli pośredniej, która ma utrzymywać relację, i chociaż Django utworzy atrybut atrybutu standard na swoim egzemplarzu modelu dla wygody użytkownika, nie ma faktycznej kolumny reprezentującej go, która mogłaby być pusta. Z definicji zawsze może być zero instancji relacji.

blank=False, ma jednak wpływ na aplikację administratora, zmuszając użytkownika do wyboru co najmniej jednej relacji.

(Należy zauważyć, że wbudowany system migracji Django tworzy migracje dla prawie każdej zmiany w modelu, niezależnie od tego, czy wpływa na bazę danych, czy też nie, więc ta zmiana spowodowałaby migrację, ale nie wpłynęłaby na baza danych lub to, czy możesz mieć zero instancji relacji.)