Django模板关键字`choice_value`在1.11中不再起作用 [英] Django template keyword `choice_value` in no longer work in 1.11
问题描述
模板中有多个复选框,如果渲染中包含值,则默认情况下将选中该选项。
There is a multiple checkbox in template, if value contain in render the choice will checked by default. It works well with 1.10.
form.py:
class NewForm(forms.Form):
project = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
queryset=Project.objects.filter(enable=True)
)
模板:
{% for p in form.project %}
<label for="{{ p.id_for_label }}">
<input type="checkbox" name="{{ p.name }}" id="{{ p.id_for_label }}"
value="{{ p.choice_value }}"
{% if p.choice_value|add:"0" in form.project.initial %} checked{% endif %}>
<p>{{ p.choice_label }}</p>
</label>
{% endfor %}
views.py:
def order_start(request, order_id):
if request.method == 'POST':
form = NewForm(request.POST)
if form.is_valid():
order.end_time = timezone.now()
order.save()
order.project = form.cleaned_data['project']
order.save()
return HttpResponsec(order.id)
else:
form = NewForm(initial={
'project': [p.pk for p in order.project.all()],
})
return render(request, 'orders/start.html', {'form': form, 'order': orderc})
当我升级到Django 1.11时, {{p.name}}
和 {{p.choice_value}}
不返回任何内容。我知道1.11已删除 choice_value
,但是如何解决此问题?
When I upgrade to Django 1.11, {{ p.name }}
and {{ p.choice_value }}
return nothing. I know 1.11 has removed choice_value
, but how to solve this problem?
1.10 https://docs.djangoproject.com/en/1.10/_modules/django/forms/widgets/
1.11 https:// docs .djangoproject.com / zh-CN / 1.11 / _modules / django / forms / widgets /
推荐答案
为@L_S'的评论。我用 dir(form)
进行调试,所有包含在 form.project.data
中的值是正确的代码:
As @L_S 's comments. I debug with dir(form)
, all value contained in form.project.data
here's the correct code:
{% for choice in form.project %}
<labelc for="{{ choice.id_for_label }}">
<input type="checkbox" name="{{ choice.data.name }}" id="{{ choice.id_for_label }}"
value="{{ choice.data.value }}"{% if choice.data.selected %} checked{% endif %}>
{{ choice.data.label }}
</label>
{% endfor %}
这篇关于Django模板关键字`choice_value`在1.11中不再起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!