/ / "Brak zainstalowanej aplikacji z etykietą" admin "" z uruchomioną migracją Django. Aplikacja jest poprawnie zainstalowana - python, django, django-admin, django-migrations

"Brak zainstalowanej aplikacji z etykietą" admin "" z uruchomioną migracją Django. Aplikacja jest poprawnie zainstalowana - python, django, django-admin, django-migrations

Próbuję użyć obiektów admin.LogEntry podczas datamigration na Django 1.7

The "django.contrib.admin" aplikacja jest na liście INSTALLED_APPS.

W powłoce działa:

>>> from django.apps import apps
>>> apps.get_model("admin", "LogEntry")
django.contrib.admin.models.LogEntry

Ale podczas migracji nie działa:

def do_it(apps, schema_editor):
LogEntry = apps.get_model("admin", "LogEntry")

Fails jak poniżej:

django-admin migrate
(...)
LookupError: No installed app with label "admin".

Używając debuggera, dostałem informację, że "admin" nie jest zainstalowany:

ipdb> apps.get_apps()
[]
ipdb> apps.all_models.keys()
["website", "google", "allauth", "twitter", "busca", "conteudo", "django_mobile", "django_filters", "videocenter", "tinymce", "oferta", "programacaotv", "contenttypes", "suit", "haystack", "destaque", "filer", "galeria", "auth", "facebook", "paintstore", "critica", "disqus", "fichas", "omeletop", "autocomplete_light", "modelsv1", "temas", "django_extensions", "adv_cache_tag", "taggit", "social", "personalidade"]

CZEMU??

Odpowiedzi:

9 dla odpowiedzi № 1

Nie znam dokładnej przyczyny tego, będę musiał zagłębić się w kod źródłowy, ale na razie można dodać obejście ("admin", "name_of_last_migration_in_admin_app") do zależności, a migracje przebiegają pomyślnie.


3 dla odpowiedzi № 2

The Django doc wyjaśnia:

Podczas pisania a RunPython funkcja korzystająca z modeli z aplikacji innych niż ta, w której znajduje się migracja, z migracji zależności atrybut powinien zawierać najnowszą migrację każdej aplikacji, która jest zaangażowana, w przeciwnym razie może pojawić się błąd podobny do: LookupError: Brak zainstalowanej aplikacji z etykietą "myappname" kiedy próbujesz odzyskać model w RunPython funkcja za pomocą apps.get_model ().

Przykład kodu:

class Migration(migrations.Migration):

dependencies = [
("app1", "0001_initial"),
# added dependency to enable using models from app2 in move_m1
("app2", "0004_foobar"),
]

operations = [
migrations.RunPython(move_m1),
]