2016-05-15 4 views
4

Ich reorganisiere eines meiner Projekte zu mehr wiederverwendbar und nur im Allgemeinen besser strukturiert und bekomme jetzt den Fehler unten, wenn ich makemigrations laufen - ich habe ausgegeben Der halbe Tag versucht, das selbst herauszufinden, aber die Google-Ergebnisse sind bei Suchanfragen ausverkauft und benötigen Unterstützung. Was ich getan habe, war ein benutzerdefiniertes Benutzermodell, das ich eingerichtet hatte, zu entfernen, so dass ich Djangos eingebautes Benutzermodell verwenden kann und ich auch die URLs meiner Apps namespaced. Ich möchte noch nicht einen Haufen Code hinzufügen, der diesen Beitrag nur verdüstern wird, da ich hoffe, dass der Traceback Hinweise hat, die ich nicht sehe. Wenn Sie sich dies ansehen und eine Vorstellung davon haben, was der Grund für den Fehler sein könnte, können Sie sich bitte beraten lassen, was Sie sehen müssen, um Hilfe anzubieten? Vielen Dank.ValueError: zu viele Werte zu entpacken (erwartet 2) in Django

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/core/management/__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/core/management/base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/core/management/base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py", line 132, in handle 
    migration_name=self.migration_name, 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/autodetector.py", line 45, in changes 
    changes = self._detect_changes(convert_apps, graph) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/autodetector.py", line 128, in _detect_changes 
    self.old_apps = self.from_state.concrete_apps 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/state.py", line 166, in concrete_apps 
    self.apps = StateApps(self.real_apps, self.models, ignore_swappable=True) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/state.py", line 228, in __init__ 
    self.render_multiple(list(models.values()) + self.real_models) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/state.py", line 296, in render_multiple 
    model.render(self) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/migrations/state.py", line 585, in render 
    body, 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/base.py", line 158, in __new__ 
    new_class.add_to_class(obj_name, obj) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/base.py", line 299, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/fields/related.py", line 707, in contribute_to_class 
    super(ForeignObject, self).contribute_to_class(cls, name, virtual_only=virtual_only) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/fields/related.py", line 307, in contribute_to_class 
    lazy_related_operation(resolve_related_class, cls, self.remote_field.model, field=self) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/fields/related.py", line 84, in lazy_related_operation 
    return apps.lazy_model_operation(partial(function, **kwargs), *model_keys) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/fields/related.py", line 82, in <genexpr> 
    model_keys = (make_model_tuple(m) for m in models) 
    File "/Users/rooster/.virtualenvs/ddm_dev/lib/python3.5/site-packages/django/db/models/utils.py", line 13, in make_model_tuple 
    app_label, model_name = model.split(".") 
ValueError: too many values to unpack (expected 2) 
+0

Ich gehe davon aus in 'make_module_tuple' Sie über irgendeine Art iterieren, die auch hat viele Schlüssel zum Auspacken. – sebenalern

+1

Können Sie mehr Code von make_module_tuple bereitstellen und den Code, in dem der Fehler erzeugt wird? – sebenalern

+0

Nun, das ist der Elefant im Raum ... Ich habe keine Ahnung, was das ist; Ich nehme an, es ist eine interne Django-Sache, weshalb es für mich so schwierig war, Fehler zu beheben. –

Antwort

3

Dieser Fehler würde nur, wenn split() kehren mehr als 2 Elemente auftreten:

app_label, model_name = model.split(".") 
ValueError: too many values to unpack (expected 2) 

Dies bedeutet, dass entweder app_label oder model_name einen Punkt (.) in ihm hat. Mein Geld ist auf dem ehemaligen, da Modellnamen automatisch generiert werden

+1

Nur eine kurze Follow-up zu Ihrer Antwort. Es war tatsächlich ein ('.'), aber der Grund, warum ich sie vorher nicht finden konnte, ist, dass wenn ich nach dem Umbenennen meiner App einen Pfad in replace eingab, alle Migrationen änderte und den App-Namen mit einem' '. . Danke nochmal. Ich habe auf jeden Fall etwas Neues gelernt. –

1

Dies passiert auch, wenn Sie ein anderes Modell in Ihrer Modelldefinition aus einer anderen App in falscher Weise beziehen.

prüft diesen Fehlerbericht - https://code.djangoproject.com/ticket/24547

path should be of the form 'myapp.MyModel' and should NOT include the name of module containing models (which is usually 'models').

Der Fehler ist in dem Zustand WORKSFORME und wird meist nicht für die Befestigung aufgenommen werden.

6

Dieses Problem tritt auch auf, wenn Sie das Refactor-Tool in Pycharm verwenden und versehentlich den Namen eines Modells für das gesamte Projekt anstatt für eine einzelne Datei umbenennen. Dies wirkt sich auch auf die Migrationsdateien aus. Daher weiß der Befehl makemigrations nicht, was zu tun ist, und löst den Wertfehler aus.

ich es fest, indem sie in alle Migrations Dateien geht und Umbenennung die folgenden Zeilen:

field=models.ForeignKey(default=1, null=True, on_delete=django.db.models.deletion.CASCADE, to='books.models.Topic'), 

zu:

field=models.ForeignKey(default=1, null=True, on_delete=django.db.models.deletion.CASCADE, to='books.Topic'), 
+0

Das ist gerade passiert, sehr nervig, um dies manuell von VCS-Änderungen rückgängig machen zu müssen. – Bartvds

+0

Ja, sieht aus wie ein pycharm Problem. Pycharm ändert die Option "nach" und bremst die Migrationen. – Kostyantyn

Verwandte Themen