Hay una casilla de verificación múltiple en la plantilla, si el valor contiene en el renderizado, la opción se marcará de forma predeterminada. Funciona bien con 1.10.
formulario.py:
class NewForm(forms.Form): project = forms.ModelMultipleChoiceField( widget=forms.CheckboxSelectMultiple, queryset=Project.objects.filter(enable=True) )modelo:
{% 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 %}vistas.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}) Cuando actualizo a Django 1.11, {{ p.name }} y {{ p.choice_value }} no devuelven nada. Sé que 1.11 eliminó choice_value , pero ¿cómo resolver este problema?
1.10 https://docs.djangoproject.com/en/1.10/_modules/django/forms/widgets/
1.11 https://docs.djangoproject.com/en/1.11/_modules/django/forms/widgets/
Como los comentarios de @L_S. Depuro con dir(form) , todos los valores contenidos en form.project.data aquí está el código correcto:
{% 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 %}