我想根据小部件选择(即,forms.py中的value
)设置我的每个单选按钮option.pk
。 {{ radio.id }}
当前不产生任何内容。如何使用Django的模板标签设置每个值?
丹尼尔·罗斯曼(Daniel Roseman)的答案像往常一样(Get the selected radio button in django template)很有帮助,并且比文档(https://docs.djangoproject.com/en/2.2/ref/forms/widgets/)提供了更多信息。 但是,我不确定如何设置该值。
模板
{% for form in formset.forms %}
<div>
<div>
{% for radio in form.selected_options %}
{{ radio.id }}
<label for="{{ radio.id_for_label }}">
<input type="radio" id="{{ radio.id_for_label }}" value="{{ radio.id }}">
{{ radio.choice_label }}
</label>
{% endfor %}
forms.py
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = ('question_text',)
labels = {'question_text': ''}
def __init__(self, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)
OPTIONS = [
(f'{option.pk}', f'{option}')
for option in Option.objects.filter(question_id=self.instance.pk)
]
self.fields['selected_option'] = forms.ChoiceField(
choices=OPTIONS,
required=True,
widget=RadioSelect(),
error_messages={
'required': 'The question form lacks a selected option'
},
)
答案 0 :(得分:1)
根据有关the testing of the above code的答案,除非产生了一些结果,否则将不会生成OPTIONS
,除非在那里使用了查询集。
为实现此目的,我残酷地修改了查询,只是为了显示一个成功的场景:
OPTIONS = [
(f'{option.pk}', f'{option}')
for option in Option.objects.all()
]
使用以下views.py:
from django.views.generic.edit import FormView
from my_app.forms import QuestionForm
class RadioView(FormView):
template_name = "the/template.html"
form_class = QuestionForm
以及以下template.html:
{% extends 'admin/index.html' %}
{% block content %}
{{ form.as_p }}
{% endblock %}
结果至少令人满意。
您可以将其扩展为使用窗体,或按照the docs中的说明手动呈现窗体。