当我将选项传递给它时,django select widget不会更新

时间:2010-11-17 10:10:24

标签: python django-models django-forms django-views

所以即时尝试在我的视图中更新选择小部件作为表单的一部分。

我已经看到了很多关于怎么做的东西,我已经跟着它并且几乎到了那里。 我有一些下面的代码被调用以填充选择和它的选择,但我认为格式化,因为它传回一个unicode字符串,我认为它需要是一个元组。

分配选择

form.fields['size_option'].widget.attrs['choices'] = Product.get_options(product)

生成选择的代码

def get_options(self):
    optionset = "("
    for option in self.optionset.options.all():
        optionset = optionset + "(\'" + option.name + "\', \'" + option.name + "\')"
    optionset = optionset + ")"
    pdb.set_trace()
    return optionset

为select生成的html在下面。

<select id="id_size_option" name="size_option" choices="((&#39;Small&#39;, &#39;Small&#39;)(&#39;Medium&#39;, &#39;Medium&#39;)(&#39;Large&#39;, &#39;Large&#39;))"> 

所以问题可能是传回的选项集。我可以猜到。我只是不知道它有什么问题。我找不到文档,说明如何在select中格式化它。

1 个答案:

答案 0 :(得分:1)

这应该是做什么的?选择列表的格式是标准元组:

CHOICES = (
    ('x', 'choice x'),
    ('y', 'choice y'),
)

所以我不明白你要对所有的字符串格式做什么。

其次,choices不是小部件attrs的元素,它是字段和/或小部件本身的属性:

form.fields['size_option'].choices = product.get_options()

在任何情况下,您可能希望在此处使用ModelChoiceField,然后您可以将queryset属性设置为所需的选项列表。

最后,您不会使用Class.method(instance)调用实例方法,而是使用instance.method()调用它 - 在您的情况下,product.get_options()