2015-09-15 14 views
6

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 ...?

+0

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

+0

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

+0

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

Odpowiedz

1

Odpowiedź brzmi ... Poproś opiekunów django-avatar, aby to naprawili.

Jeśli chcesz po prostu użyć domyślnej pamięci, musisz podać None lub django.core.files.storage.default_storage na ImageField. W tym przypadku wartość kwarg nie zostanie przekazana do pola migracji.

Utworzono PR, aby to naprawić.

+0

Nice: 'default_storage' - nie wiedziałem o tym. Czy django-awatar nie potrzebuje teraz nowej migracji, aby zastąpić jawne odniesienie do 'django.core.files.storage.FileSystemStorage()' w swojej [początkowej migracji] (https://github.com/grantmcconnaughey/django- awatar/blob/2.1.1/awatar/migracje/0001_initial.py # L23)? – medmunds

+0

@medmunds Właśnie zmodyfikowałem istniejącą migrację w PR, jednak nie jestem pewien, czy to jest poprawne podejście / –

Powiązane problemy