python - 分配选项以在显示时选择下拉列表

标签 python django django-models django-forms

如果我有这样的表格

class ProductAddToCartForm(forms.Form):
    quantity = forms.IntegerField(widget=forms.TextInput(attrs={'size':'2', 'value':'1', 'class':'quantity', 'maxlength':'5'}), error_messages={'invalid':'Please enter a valid quantity.'}, min_value=1)
    size_option = forms.ChoiceField(widget=forms.Select(choices=()))
    product_slug = forms.CharField(widget=forms.HiddenInput())

在我看来,为什么我不能执行以下操作?

    form = ProductAddToCartForm(request=request, label_suffix=':')
    if product.has_options():
        Prod_Choices = product.get_options()
        form.fields['size_option'] = forms.ChoiceField(widget=forms.Select(choices=Prod_Choices))
    else: 
        form.fields['size_option'].widget.attrs['type'] = "hidden"

这个的明显用途是在迷你商店中,我试图显示每个项目可能存在或可能不存在的选项的下拉菜单。如果没有 optinos 我想隐藏下拉菜单

我设法以不同的方式做到这一点,也就是说,我可以通过检查选项集是否存在(这就是product.has_options() 所做的)然后在此时填充下拉列表来在模板中完成此操作。但这样我就必须在将选定的选项发布到购物车时将其添加到表单中。简而言之,我想知道是否有原因导致我无法执行上述操作。

代码运行良好,但它不会隐藏没有选项的下拉列表。

最佳答案

嘿,我在 shell/html 中玩了一下,看起来这一切应该可以工作。

看起来您可以执行您发布的操作。

您说您不确定如何在 View 中分配选项?我测试了你的代码,看起来可行吗? form.fields[myfield] = forms.NewField()正确修改下一次调用表单显示。

看起来您也可以直接编辑 forms.fields[myfield].choices 属性。

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=[(x, x+1) for x in range(3)])

# hmm choices is an interesting attribute
>>> form.fields['myfield'].choices
[(0, 1), (1, 2), (2, 3)]

>>> form.fields['myfield'].choices = [('New', 'Choice') for x in range(3)]
>>> form.as_p()
<output reflecting new choices>
<小时/>

至于禁用该字段:

您的禁用它的代码不起作用是因为 type='hidden'不适用于<select>元素。

我认为禁用它的选项是:

  1. 隐藏字段。 form.fields['myfield'].widget.attrs['styles'] = 'display:none;'
  2. 删除该字段。 del form.fields['myfield']
  3. 选择不在模板中显示它。 {% if product.get_options %}{{ field }}{% endif %}
  4. 哦,我发现您可以使用下面的 forms.HiddenInput() 。

看来您已经完成了 99% 的任务?

关于python - 分配选项以在显示时选择下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421603/

相关文章:

django - 在TravisCI中运行dockerized django应用程序时,coveralls无法识别 token ,而只能从请求请求中识别

python - Django 可以用于 Web 服务吗?

python - Django 多个数据库 - 关系不存在;第 1 行 : SELECT COUNT(*) AS "__count" FROM

python - 如何使用 Django 获取两条随机记录

python - pd.groupby 按列+列表

python - 根据单元格值定位行

django - 在 Django REST framework 中注册用户并为用户设置组

python - 正则表达式拆分第一个冒号

python - 如何可视化集群边界

Django 抛出 OperationalError : index row requires 35424 bytes, 最大大小为 8191