Я работаю над созданием страницы, где пользователь может выбрать месяц с помощью переключателей. Мне также нужно собрать другую информацию, такую как имя, фамилия, адрес электронной почты, номер телефона и компания. При этом я решил, что использование форм Django должно быть выполнено. Я начал и все реализовал и добрался до части радиокнопок. Я узнал, что мне нужно сделать это, используя ChoiceField, и что RadioSelect является виджетом этого. Все мои варианты отображаются, но я не могу щелкнуть ни один из них, чтобы выбрать их. Кроме того, это будет обязательный вопрос, и я не уверен, как сделать эту форму обязательной, поскольку ее можно оставить пустой, и я вижу, что она по-прежнему будет POST без проблем.
Я погуглил все под солнцем. Я попытался установить начальный выбор для этого, надеясь, что он покажет хотя бы одну радиокнопку, но этого не произошло. Я попытался просто сделать widget = forms.Select () вместо RadioSelect () и по-прежнему отображать месяцы, но я не могу выбрать ни одного из них. Не уверен, что делать. Это использует Django 2.1, если это помогает.
index.html --- Пожалуйста, обратите внимание, что, хотя у меня есть место для переключателей на месяц, я пытаюсь не использовать их в шаблоне и предпочитаю их в файле form.py
{% extends '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())
От этого я ожидаю, что месяцы будут отображаться с помощью переключателей, которые пользователь может выбрать из
![This is what I see after removing the hardcoded inputs from the template](https://i.stack.imgur.com/FOb3l.png)