Aplikacja My Django 1.8 korzysta z aplikacji innej firmy (django-avatar), której model zawiera element ImageField. Używam również niestandardowego DEFAULT_FILE_STORAGE (S3BotoStorage z django-storages-redux) w moim settings.py mojego projektu. W rezultacie, za każdym razem uruchomić manage.py migrate
, mam to ostrzeżenie o aplikacji Avatar:Django "zmiany nie odzwierciedlone w migracji" za pomocą ImageField i niestandardowej pamięci masowej
Twoje modele są zmiany, które nie zostały jeszcze odzwierciedlone w migracji, a więc nie będzie stosowana. Uruchom "manage.py makemigrations", aby wykonać nowe migracje, a następnie ponownie uruchom "manage.py migrate", aby je zastosować.
... ponieważ avatar's initial migration odnosi się do domyślnego pliku Django FileSystemStorage. Uruchamianie makemigrations tworzy nowy 0002 migracji w aplikacji offline, aby przechowywanie swojego ImageField za dopasować moje ustawienia projektu:
...
migrations.AlterField(
model_name='avatar',
name='avatar',
field=models.ImageField(storage=storages.backends.s3boto.S3BotoStorage(), max_length=1024, upload_to=avatar.models.avatar_file_path, blank=True),
),
Problemem jest ta nowa migracja jest tworzony w awatarze zainstalowanego w miejscu opakowań Pythona, poza moim projekcie (więc poza kontrolą git, niedostępne do wdrożenia, itp.).
Jaki jest właściwy sposób obsługi migracji do aplikacji innej firmy, która korzysta z ImageField (lub FileField) w projekcie z niestandardowym DEFAULT_FILE_STORAGE? Rozważałem:
Po prostu zignoruj ostrzeżenie. Migracja do zmiany magazynu w rzeczywistości nie ma wpływu na schemat bazy danych, a ponieważ DEFAULT_FILE_STORAGE mojego projektu jest od S3BotoStorage, migracja danych nie jest potrzebna.
Użyj settings.MIGRATION_MODULES, aby przenieść migracje avatara do mojego projektu. (A potem starannie portu nad każdym przyszłego avatar migracji do mojej kopii - co wydaje błędów.) [EDIT:. this comment na liście mailingowej django-users sugeruje, jest to złe podejście]
Zapytaj opiekunowie django-avatar (lub django-storages-redux), aby zmienić ... co? (BTW, S3BotoStorage jest już deconstructible - to nie problem.)
Lub ...?
Hej medmundzie, jestem aktualnym opiekunem django-awatara i chciałbym poznać odpowiedź na to pytanie. Czy sądzisz, że utworzenie kolejnej migracji, która zmienia atrybut 'ImageField.storage' na odniesienie do' settings.AVATAR_STORAGE', zapobiegnie temu? – grantmcconnaughey
Hej Grant, dzięki za pakiet! Tak więc należy dodać migrację schematu do django awatara i ręcznie edytować, aby uzyskać coś w stylu 'storage = get_storage_class (settings.AVATAR_STORAGE)()'?Myślę, że to rozwiąże mój problem, ale musielibyście pamiętać, żeby w ten sam sposób edytować wszystkie przyszłe schemamigracje Django-Avatar. Ponadto może * powodować * problemy dla osób, które naprawdę próbują migrować z jednego magazynu do drugiego, ponieważ nie byłoby to zamrożeniem stanu w czasie migracji (być może - nie jestem tego pewien). – medmunds
Istnieje pewna dyskusja na temat migracji i magazynów w śledzaku Django ([22373] (https://code.djangoproject.com/ticket/22373) i [22337] (https://code.djangoproject.com/ticket/22337)), ale żadna z nich w kontekście aplikacji innych firm. Zastanawiam się, czy pomogłoby to podnieść kwestię tam? – medmunds