我正在尝试使用带有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')],)
是没有意义的,会得到相同的结果
有人能告诉我发生了什么事吗
所以,经过一番努力,终于找到了答案。我必须传递由主键(id)值和类别组成的元组列表,如下所示:
相关问题 更多 >
编程相关推荐