ValueError在表单中使用动态选项时,需要解包的值太多(预期为2)



我试图使用一个ChoiceField与Django Forms建立一个下拉字段的类别选择,应该动态更新,每当一个类别被添加。对于动态更新,我使用init表单的功能:

class CreateForm(forms.Form):
title=forms.CharField(xxx)
description = forms.CharField(xxx)
URL = forms.CharField(xxx)
starting_price = forms.IntegerField(xxx)
def __init__(self, *args, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
self.fields['category'] = forms.ChoiceField(choices=[value['category'] for value in Category.objects.all().values('category')])

Category对象是一个只有一个条目的模型,即category = models.CharField()。现在,在Django文档中,它提到choices的任何可迭代对象都可以工作。所以在理论上,一个列表应该工作(上面给了我一个像['furniture', 'appliances', 'cars']这样的列表)。

然而,我得到了一个ValueError: too many values to unpack (expected 2)

我也试图在list()语句中包装列表,结果相同。尝试像([value['category'] for value in Category.objects.all().values('category')],)这样的元组,这应该没有意义,给出相同的结果。

谁能告诉我发生了什么事?

于是,经过一番折腾找到了答案。我必须传递一个由主键(id)的值和类别组成的元组列表,如下所示:

[(value['id'],value['category']) for value in Category.objects.all().values()]

最新更新