Django: ValueError: zu viele Werte zu entpacken
Ich bin immer ein ValueError, und ich kann nicht die Abbildung der bug out für das Leben von mir. Ich bin mir bewusst, dass der Fehler bedeutet, es gibt mehr Werte übergeben werden, um eine variable als erwartet (ie, (x, y) = 1, 2, 3
), aber ich sehe nicht, warum das ein problem hier.
Dies ist, wo der Fehler ist (in einer views.py Datei):
## image_pks is just a list of ImageItem primary keys (eg, [1, 2] or [5])
queryset = ImageItem.objects.filter(pk__in=image_pks)
ImageInfoFormset = modelformset_factory(ImageItem, fields=('title', 'caption'), extra=0)
formset = ImageInfoFormset(queryset) ## Error happening here!!!
Dies ist, was die ImageItem Modell sieht wie folgt aus:
class ImageItem(models.Model):
user = models.ForeignKey(User)
upload_date = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
library = models.ForeignKey(Library)
img_big = models.ImageField(upload_to=img_get_file_path)
img_363 = models.ImageField(upload_to=img_get_file_path)
title = models.CharField(max_length=50,
blank=True)
caption = models.CharField(max_length=1000,
blank=True)
Dies ist die Informationen, die auf traceback:
Und hier sind die lokalen Variablen auf dem traceback:
Lassen Sie mich wissen, wenn Euch weitere Informationen benötigen, Dank!
EDIT: hier ist der komplette traceback zur Verfügung gestellt:
Traceback:
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/sgarza62/riotry_master/riotry/backboard_general/views.py" in Backboard_Home
44. formset = ImageInfoFormset(queryset) # TOO MANY VALUES ERROR HERE!
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/models.py" in __init__
424. super(BaseModelFormSet, self).__init__(**defaults)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/formsets.py" in __init__
50. self._construct_forms()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/formsets.py" in _construct_forms
114. for i in xrange(self.total_form_count()):
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/formsets.py" in total_form_count
88. return self.management_form.cleaned_data[TOTAL_FORM_COUNT]
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/formsets.py" in _management_form
74. if not form.is_valid():
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
124. return self.is_bound and not bool(self.errors)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py" in _get_errors
115. self.full_clean()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
270. self._clean_fields()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py" in _clean_fields
281. value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py" in value_from_datadict
205. return data.get(name, None)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py" in get
358. clone = self.filter(*args, **kwargs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py" in filter
624. return self._filter_or_exclude(False, *args, **kwargs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude
642. clone.query.add_q(Q(*args, **kwargs))
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q
1250. can_reuse=used_aliases, force_having=force_having)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_filter
1056. arg, value = filter_expr
Exception Type: ValueError at /backboard/
Exception Value: too many values to unpack
EDIT 2:
Ich Spiele mit ihm um, und da ist etwas seltsames passiert. Wenn ich die Zeile ändern queryset = ImageItem.objects.filter(pk__in=image_pks)
zu queryset = ImageItem.objects.get(pk=10)
(wobei 10 eine beliebige id), erhalte ich die folgende Fehlermeldung: AttributeError: 'ImageItem' object has no attribute 'get'
, und die ursprünglich problematische Zeile wirft den Fehler!
Es ist eine seltsame Fehlermeldung, weil ImageItem ist nur ein normales Modell. Natürlich hat es das Attribut 'get'
. Hat das etwas zu tun mit der Tatsache, dass die queryset wird zuerst ausgewertet wird, auf die problematische Zeile (formset = ImageInfoFormset(queryset)
)? Ist ImageItem zugewiesen wird, um etwas anderes nach der Abfrage geschrieben wird, aber bevor es ausgewertet wird?
Das ist die Linie, dass die traceback-signalisiert (ich habe die Dinge geändert um zu testen und es sagt mir, dass das problem auf, dass die Linie). Gibt es nicht Auspacken stattfindet, wenn das queryset übergeben wird, als argument an
ImageInfoFormset
?Nicht auf die exakte Linie, Nein.
Also, was ist
ImageInfoFormat(queryset)
zurück?Das ist egal, entweder; der Rückgabewert zugewiesen wird, one - variable. Ich vermute, es gibt mehr zu dieser traceback als hier dargestellt.
InformationsquelleAutor sgarza62 | 2013-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, loszuwerden, die
queryset=
definition (die erste Zeile) und wie folgt statt:Müssen Sie explizit festlegen, dass Sie ändern den queryset, ansonsten sind Sie nur auf der Durchreise eine weitere variable für das formset.
Sehen die docs hier.
queryset
Cache in diesem Szenario?Es wurde eine Erklärung Hinzugefügt und link zu den docs. Im Grunde waren Sie nur senden Sie eine weitere variable anstelle von überschreiben der Standard-queryset.
InformationsquelleAutor Dan Hoerst
Ich würde versuchen, mit `formset = ImageInfoFormset(queryset.values())
statt
formset = ImageInfoFormset(queryset)
InformationsquelleAutor Anthony Perot