ユーザーがラジオボタンを使用して月を選択できるページの作成に取り組んでいます。また、これを使用して、名、姓、電子メール、電話番号、会社などの他の情報を収集する必要があります。これを行う際に、私はDjangoフォームを使用することで仕事が完了するはずだと考えました。私はすべてを始めて実装し、ラジオボタンの部分にたどり着きました。ChoiceFieldを使用してこれを行う必要があり、RadioSelectがそのウィジェットであることがわかりました。すべての選択肢が表示されていますが、いずれかをクリックして選択することはできません。また、これは必須の質問になります。空白のままにしておくことができ、問題なくPOSTされるため、これを必須のフォームにする方法がわかりません。
私は太陽の下ですべてをググった。少なくとも1つのラジオボタンが表示されることを期待して、最初の選択を設定しようとしましたが、それはできませんでした。RadioSelect()の代わりにwidget = forms.Select()を実行しようとしましたが、月が表示されますが、いずれも選択できません。何をすべきかわからない。それが助けになるなら、これはDjango2.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())
私がこれに期待しているのは、ユーザーが選択できるラジオボタンで何ヶ月も表示することです
本当に自分で行う必要がない限り、Djangoにinput
タグをレンダリングさせる必要があります。
フォーム全体を{{ form }}
または{{ form.as_p }}
または同様にレンダリングさせることができます。または、次のような個々のフィールドをレンダリングすることもできます{{ form.month }}
(また{{ form.month.errors }}
、検証エラーを表示することもできます)。関連ドキュメント:https://docs.djangoproject.com/en/2.2/topics/forms/#rendering-fields-manually
あなたの当面の問題は、単一の<form>
要素に重複した入力があること、つまり同じname
属性を持つ入力があることだと思います。入力の1つのセット(ラジオボタン)は{{ form }}
テンプレートタグから取得され、もう1つのセットはテンプレートにハードコードされています。ハードコードされた入力を削除して、フォームが期待どおりに動作し始めるかどうかを確認してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加