ValueError在表单中使用动态选项时,要解压缩的值太多(应为2)

2024-04-26 15:58:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用带有Django表单的ChoiceField来为类别选择设置一个下拉字段,每当添加类别时,该字段都应该动态更新。对于动态更新,我使用表单的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的任何iterable都可以工作。因此,从理论上讲,一个列表应该是有效的(上面给出了一个类似于So['furniture', 'appliances', 'cars']的列表)

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

我还试图用一个list()语句来包装这个列表,结果是一样的。 尝试像这样的元组([value['category'] for value in Category.objects.all().values('category')],)是没有意义的,会得到相同的结果

有人能告诉我发生了什么事吗


Tags: djangoself表单列表initvalue动态forms
1条回答
网友
1楼 · 发布于 2024-04-26 15:58:30

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

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

相关问题 更多 >