【发布时间】:2016-05-04 08:02:14
【问题描述】:
我现在正在处理一个充满大量错误的项目。我浏览了文章、文档、第三方插件等来帮助我,但我仍然缺少一些东西。 项目: 该项目是一个简单的单页网站,其末尾有一个表单供用户与我联系。
问题: 1.我需要为此创建一个模型吗?将用户填写表格的任何内容存储到数据库中是否可取? 2. 如何使用“forms.Form”而不是“forms.ModelForm”方法将用户输入写入数据库。
问题: 在我的表单中,我有一个“主题”选择,这取决于用户对“主题”的选择,显示更多要填写的表单。
- Django 仅当且仅当所有输入均已填写时才将整个表单标记为有效,但并非所有输入都应填写,因为有一个选项。
代码:
forms.py
class ContactForm(forms.Form):
first_name = forms.CharField(widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'First Name', 'id': 'first_name', 'name': "first_name"}),
max_length=30, min_length=3, required=True,label='')
last_name = forms.CharField(widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Last Name', 'id': 'last_name', 'name': "last_name"}),
required=True,label='')
number = forms.IntegerField(widget=forms.NumberInput(
attrs={'class': 'form-control', 'placeholder': 'Phone Number', 'id': 'num', 'label': '', 'name': "number"}),
label='')
email = forms.EmailField(widget=forms.EmailInput(
attrs={'class': 'form-control', 'placeholder': 'Email', 'id': 'contact', 'label': '', 'name': "email"}),
required=True, label='' )
subject_options = ('Subject', 'Book A Driver', 'Become A Driver', 'Ask A Question')
topic = forms.ChoiceField(choices=[(x, x) for x in subject_options], widget=forms.Select(
attrs={'class': 'form-control', 'placeholder': '', 'id': 'subject', 'label': '', 'name': "subject"}),
label='')
feedback_options = ('Feedback Means', 'Call', 'Email', 'Email and Call')
feedback = forms.ChoiceField(choices=[(x, x) for x in feedback_options], widget=forms.Select(
attrs={'class': 'form-control', 'placeholder': '', 'id': 'feedback', 'label': '', 'name': "feedback"}),
label='')
plan_options = ('Plan', 'Hourly', 'Daily', 'Monthly', 'Event Plan')
# plan = forms.ChoiceField(choices=[(x, x) for x in plan_options], widget=forms.Select(
# attrs={'class': 'form-control', 'placeholder': '', 'id': 'plan', 'label': ''}))
enquiry_message = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control',
'placeholder': 'Ask Us A Question', 'id': 'enquiry',
'name': "enquiry"}), label='')
driver_sex_option = ('Driver Sex ', 'Male', 'Female')
driver_sex = forms.ChoiceField(choices=[(x, x) for x in driver_sex_option], widget=forms.Select(
attrs={'class': 'form-control', 'placeholder': '', 'id': 'driver_sex', 'label': '', 'name': "driver_sex"}),
label='')
# driver_dress_options = ('Driver Dress', 'Casual', 'Official', 'Traditional', 'Any')
# driver_dress = forms.ChoiceField(choices=[(x, x) for x in driver_dress_options], widget=forms.Select(attrs={'class': 'form-control', 'placeholder': '', 'id': 'driver_dress', 'label': '', 'name':"driver_dress"}) )
payment_options = ('Payment Plans', 'Cash', 'Credit Card')
payment = forms.ChoiceField(choices=[(x, x) for x in payment_options], widget=forms.Select(
attrs={'class': 'form-control', 'placeholder': '', 'id': 'pay', 'label': ''}), label='')
home_addres = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control',
'placeholder': 'Home Adress', 'id': 'address',
'name': "address"}))
residence_options = ('Years of Residency in Lagos', '1', '2', '3', '4', '5', 'More than 5', 'More than 10')
residence_years = forms.ChoiceField(choices=[(x, x) for x in residence_options],
widget=forms.Select(
attrs={'class': 'form-control', 'placeholder': '', 'id': 'residency',
'label': '', 'name': "residency"}))
lasdri = forms.CharField(widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'LASDRI Certificate Number', 'id': 'certification',
'name': "certification"}),label='')
experience_options = ('Years of Experience', '1', '2', '3', '4', '5', 'More than 5', 'More than 10')
experience_years = forms.ChoiceField(choices=[(x, x) for x in experience_options], widget=forms.Select(
attrs={"class": 'form-control', 'placeholder': '', 'id': 'experience', 'label': '', 'name': "experience"}),
required=True, label='')
views.py:
def index(request):
form = ContactForm
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
number = form.cleaned_data['number']
email = form.cleaned_data['email']
subject = form.cleaned_data['topic']
feedback = form.cleaned_data['feedback']
enqiry = form.cleaned_data['enquiry_message']
years = form.cleaned_data['experience_years']
sex = form.cleaned_data['driver_sex']
add = form.cleaned_data['home_addres']
plan = form.cleaned_data['plan']
pay = form.cleaned_data['pay' ]
cert = form.cleaned_data['lasdri' ]
residence = form.cleaned_data['residence_years']
return HttpResponse('Done')
`return render(request, 'information/index.html', {'form': form})`
template :
' {% csrf_token %}`<form action="" method="post" >
{{ form }}
<input type="submit" id="submit_btn" class="btn btn-info btn-lg" placeholder="Contact Us">`enter code here`
</form>
除了上面提到的,如果有人知道我可以添加一些东西来使整个代码更好,我真的很感激。 我知道它很长。请原谅我。 谢谢。
我又使用了脆皮表格。它工作得很好,谢谢。 现在面临的问题是表单没有验证表单并使用数据库中的模型填充其值。 我已经编辑了 forms.py,但 views.py 仍然是一样的。我希望这可以帮助您帮助我弄清楚缺少什么
【问题讨论】: