【发布时间】:2019-10-05 01:43:03
【问题描述】:
我正在构建一个页面,用户可以在其中通过使用单选按钮选择月份。我还需要收集其他信息,例如名字、姓氏、电子邮件、电话号码和公司。在这样做时,我认为使用 Django 表单应该可以完成工作。我开始并实现了一切,并进入了单选按钮的部分。我发现我需要使用 ChoiceField 来执行此操作,而 RadioSelect 是它的一个小部件。我的所有选择都显示出来了,但我无法单击其中任何一个来选择它们。此外,这将是一个必填问题,我不知道如何将其设为必填表单,因为它可以留空,我看到它仍然会毫无问题地发布。
我用谷歌搜索了阳光下的一切。我试图为它设置一个初始选择,希望它至少显示一个单选按钮,但没有这样做。我尝试只做 widget=forms.Select() 而不是 RadioSelect() 并且仍然显示月份,但我无法选择其中任何一个。不知道该怎么办。如果有帮助,这是使用 Django 2.1。
index.html --- 请注意,虽然我在这里确实有月份单选按钮的位置,但我试图在模板中不包含它们,并且更喜欢它们在 form.py文件 {% 扩展 'landingpage/layout.html' %}
{% block content %}
<div class="h1 col s3 left-align grey lighten-4" style="font-family: 'Exo', sans-serif;">Welcome to FaithGuard</div>
<div class="div">
<br>
<br>
<br>
<br>
</div>
<div class="row" style="font-family: 'Exo', sans-serif;">
<form method='POST' class="col s6"> {% csrf_token %}
{{ form }}
<div class="h1 col s6 grey lighten-4 radioRequired">Date of renewal/expiration</div>
<br>
<br>
<div class="div" id ="Exiration Month Div">
<p>
<label>
<input name="month" value ="January" type="radio" />
<span>January</span>
</label>
<label>
<input name="month" value ="February" type="radio" />
<span>February</span>
</label>
<label>
<input name="month" value="March" type="radio" />
<span>March</span>
</label>
<label>
<input name="month" value="April" type="radio" />
<span>April</span>
</label>
</p>
<p>
<label>
<input name="month" value="May" type="radio" />
<span>May</span>
</label>
<label>
<input name="month" value="June" type="radio" />
<span>June</span>
</label>
<label>
<input name="month" value="July" type="radio" checked/>
<span>July</span>
</label>
<label>
<input name="month" value="August" type="radio" />
<span>August</span>
</label>
</p>
<p>
<label>
<input name="month" value="September" type="radio" />
<span>September</span>
</label>
<label>
<input name="month" value="October" type="radio" />
<span>October</span>
</label>
<label>
<input name="month" value="November" type="radio" />
<span>November</span>
</label>
<label>
<input name="month" Value="December" type="radio" />
<span>December</span>
</label>
</p>
<div class="div right-align">
<button class="btn waves-effect waves-light" type="submit" name="action">Submit</button>
</div>
</div>
</form>
</div>
{% endblock %}
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .forms import ContactForm
# Create your views here.
def index(request):
contact_form = ContactForm(request.POST or None)
context = {
'form' : contact_form
}
if contact_form.is_valid():
print(contact_form.cleaned_data)
if request.method == "POST":
print(request.POST)
# print(request.POST.get('email'))
return render(request, 'landingpage/index.html', context)
forms.py
from django import forms
class ContactForm(forms.Form):
firstname = forms.CharField(
label="First Name", widget=forms.TextInput(
attrs={
"class": "form-control",
"placeholder": "First Name"
}
)
)
lastname = forms.CharField(
label="Last Name", widget=forms.TextInput(
attrs={
"class": "form-control",
"placeholder": "Last Name"
}
)
)
npo = forms.CharField(
label="Nonprofit Organization", widget=forms.TextInput(
attrs={
"class": "form-control",
"placeholder": "Nonprofit Organization",
}
)
)
email = forms.EmailField()
phone = forms.IntegerField(min_value=999999)
month = forms.ChoiceField(label='Month of Renwal/Expiration', choices=[('1', 'January'), ('2', 'February'),('3', 'March'),('4','April'),('5','May'),('6','June'),('7','July'),('8','August'),('9','September'),('10','October'),('11','November'), ('12', 'December')], initial='1',
widget=forms.RadioSelect())
# EXAMPLE FROM ANOTHER STACKOVERFLOW RADIOSELECT ISSUE
# do_a = forms.ChoiceField(label='Do A',choices=[('1', 'Yes'), ('2', 'No'), ('3', 'Maybe')], initial='Maybe', widget = forms.RadioSelect())
我对此的期望是使用用户可以从中选择的单选按钮显示月份
【问题讨论】:
-
请显示视图和模板。
-
Worksforme,问题可能出在其他地方。一些花哨的 JS?
-
@DanielRoseman,我添加了它们。感谢您的回复。
-
@frnhr,我很高兴它对你有用。那里没有花哨的JS。还没有添加。
-
@TheCodingRecruiter 除了 2 个月(您应该从模板中删除手动创建的)之外,您的代码运行良好 - 我可以看到打印的验证数据和 POST 数据。
标签: django python-3.x django-forms