【问题标题】:django select widget doesnt update when i pass the choices into it当我将选择传递给它时,django select 小部件不会更新
【发布时间】:2010-11-17 10:10:23
【问题描述】:

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

我已经看到了很多关于如何做的东西,我已经遵循它并且几乎到达那里。 我在下面有一些代码被调用来用选项填充选择,它确实如此,但我认为格式已经过时了,因为它传回了一个 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

为选择生成的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;))"> 

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

【问题讨论】:

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


【解决方案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()

【讨论】:

  • Daniel,每个产品的连音都不同,因此我需要在展示产品时获取连音。因此相当随机的字符串格式。我已经从这一行移到了以下行,而不是那些 4 def get_options(self): return self.optionset.options.all().values_list('name', 'name') 那么它就像修复调用一样简单正如你上面所说,我正在工作。到下一个问题;)
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2020-11-30
  • 2019-10-25
  • 2023-02-05
  • 2020-02-07
  • 2019-05-13
  • 1970-01-01
相关资源
最近更新 更多