关于Django RadioSelect初始值

2024-04-25 05:18:54 发布

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

对于这样一个蹩脚的问题,我很抱歉,但我无法为ModelForm中的字段设置初始值。看起来像这样:

class OrderRegisterForm(forms.ModelForm):

    class Meta:
        model = Order
        widgets = {
            'weight_units': forms.RadioSelect,
        }

在模型中:

^{pr2}$

但是我试着用这样的模板来呈现它

<ul class="form__row__list">
{{ order_form.weight_units }}
</ul>

出现正确的值,但未选中具有默认值的单选按钮。我试图传递一个初始参数,重写表单中的__init__等等,但仍然没有任何效果。在

更新

因为_p()提供了正确的结果。事情越来越奇怪了。在

<p>
<label for="id_weight_units_0">Weight units:</label>
<ul id="id_weight_units">
    <li>
        <label for="id_weight_units_0"><input checked="checked" id="id_weight_units_0" name="weight_units" type="radio" value="KG" /> kg</label>
    </li>
    <li>
        <label for="id_weight_units_1"><input id="id_weight_units_1" name="weight_units" type="radio" value="TN" /> t</label>
    </li>
</ul>

请告诉我我的错误。在


Tags: nameformidforinputtypeformsli
2条回答

根据这个问题:default value for django choice field

您必须执行以下操作: https://stackoverflow.com/a/22257696/659900

使用默认属性:

display = models.CharField(..., default=FRIENDS)

或者

^{pr2}$

*更新*

我已经拿走了你的代码,并试图重现你的错误。但不幸的是,你的代码确实有效。在

这就是我所做的

在模型.py在

class Order(models.Model):

    WEIGHT_UNIT_CHOICES = (
        ('KG', 'kg'),
        ('TN', 't'),
    )

    weight_units = models.CharField(
        max_length=2,
        choices=WEIGHT_UNIT_CHOICES,
        default="TN"
    )

在表单.py在

class OrderRegisterForm(ModelForm):

    class Meta:
        model = Order
        widgets = {
            'weight_units': RadioSelect,
        }

我使用shell查看生成了什么HTML:

>> from playground.test_app.forms import OrderRegisterForm

>> o = OrderRegisterForm()
>> o.as_p()

这给了我以下输出(为了清晰起见,格式化):

<p>
  <label for="id_weight_units_0">Weight units:</label> 
  <ul>\n
    <li>
      <label for="id_weight_units_0">
       <input type="radio" id="id_weight_units_0" value="KG" name="weight_units" />
         kg</label>
     </li>\n
     <li>
       <label for="id_weight_units_1">
         <input checked="checked" type="radio" id="id_weight_units_1" value="TN" name="
weight_units" /> 
         t</label>
      </li>\n
    </ul>
  </p>  

我特意将默认值设置为“TN”,以确保django不会意外地使用第一个元素。请参见checked="checked"属性,Django确实使用了正确的默认值。你有没有一些有趣的Javascript可能会改变你的输出?在

那么您能提供.as_p()方法的输出吗?在

这可能会澄清很多事情。在

所以,我找到了解决办法。问题是我要过去了请求.GET它似乎完全重写了字段的初始值。所以,如果你这么做

f = Form(request.GET)

发生了上述问题。为了避免这种情况,可能的正确代码是:

^{pr2}$

相关问题 更多 >