Django:ValueError:解压缩的值太多了

时间:2021-10-23 20:20:17

I'm getting a ValueError, and I cannot figure the bug out for the life of me. I am aware that the error means there are more values being passed to a variable than expected (ie, (x, y) = 1, 2, 3), but I don't see why that's a problem here.

我得到了一个ValueError,我无法想象我的生活中的错误。我知道错误意味着有更多的值传递给变量而不是预期(即(x,y)= 1,2,3),但我不明白为什么这是一个问题。

This is where the error is (in a views.py file):

这是错误的位置(在views.py文件中):

## 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!!!

This is what the ImageItem model looks like:

这就是ImageItem模型的样子:

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)

This is the information on traceback:

这是关于追溯的信息:

Django:ValueError:解压缩的值太多了Django:ValueError:解压缩的值太多了

And here are the local variables on the traceback:

以下是traceback上的局部变量:

Django:ValueError:解压缩的值太多了

Let me know if you guys need any more information, thanks!

如果您需要更多信息,请告诉我们,谢谢!

EDIT: here is the entire traceback provided:

编辑:这是提供的整个回溯:

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: I'm playing around with it, and there's something strange happening. When I change the line queryset = ImageItem.objects.filter(pk__in=image_pks) to queryset = ImageItem.objects.get(pk=10) (where 10 is an arbitrary id), I get the following error: AttributeError: 'ImageItem' object has no attribute 'get', and the originally problematic line is throwing the error!

编辑2:我正在玩它,并且发生了一些奇怪的事情。当我将行queryset = ImageItem.objects.filter(pk__in = image_pks)更改为queryset = ImageItem.objects.get(pk = 10)(其中10是任意id)时,我收到以下错误:AttributeError:'ImageItem'对象没有属性'get',最初有问题的行抛出错误!

It's a strange error, because ImageItem is just a normal model. Of course it has the attribute 'get'. Does this have something to do with fact that the queryset is first being evaluated on the problematic line (formset = ImageInfoFormset(queryset))? Is ImageItem being assigned to something else after the query is written, but before it is evaluated?

这是一个奇怪的错误,因为ImageItem只是一个普通的模型。当然它有'get'属性。这是否与查询集首先在有问题的行上进行评估(formset = ImageInfoFormset(queryset))有关?在写入查询之后,在评估之前,是否将ImageItem分配给其他内容?

2 个解决方案

#1


1  

Try getting rid of the queryset= definition (your first line) and doing the following instead:

尝试删除queryset = definition(您的第一行)并执行以下操作:

ImageInfoFormset = modelformset_factory(ImageItem, fields=('title', 'caption'), extra=0)
formset = ImageInfoFormset(queryset=ImageItem.objects.filter(pk__in=image_pks))

You have to explicitly define that you are changing the queryset, otherwise you are just passing another variable to the formset.

您必须明确定义您正在更改查询集,否则您只是将另一个变量传递给formset。

See the docs here.

请参阅此处的文档。

#2


0  

I would try with `formset = ImageInfoFormset(queryset.values())

我会尝试`formset = ImageInfoFormset(queryset.values())

formset = ImageInfoFormset(queryset.values())

instead of

formset = ImageInfoFormset(queryset)

formset = ImageInfoFormset(queryset)

#1


1  

Try getting rid of the queryset= definition (your first line) and doing the following instead:

尝试删除queryset = definition(您的第一行)并执行以下操作:

ImageInfoFormset = modelformset_factory(ImageItem, fields=('title', 'caption'), extra=0)
formset = ImageInfoFormset(queryset=ImageItem.objects.filter(pk__in=image_pks))

You have to explicitly define that you are changing the queryset, otherwise you are just passing another variable to the formset.

您必须明确定义您正在更改查询集,否则您只是将另一个变量传递给formset。

See the docs here.

请参阅此处的文档。

#2


0  

I would try with `formset = ImageInfoFormset(queryset.values())

我会尝试`formset = ImageInfoFormset(queryset.values())

formset = ImageInfoFormset(queryset.values())

instead of

formset = ImageInfoFormset(queryset)

formset = ImageInfoFormset(queryset)