Python django-如果提交的表单值为X,则阻止表单提交
我正在使用Django 1.4.6和python 2.7 我有一个测试表单,允许用户从选择列表中输入数据:Python django-如果提交的表单值为X,则阻止表单提交,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我正在使用Django 1.4.6和python 2.7 我有一个测试表单,允许用户从选择列表中输入数据: <select name="language_code" id="id_language_code"> <option value="en-CA">English (Canada) - English (Canada)</option> <option value="en-GB" selected="selected">En
<select name="language_code" id="id_language_code">
<option value="en-CA">English (Canada) - English (Canada)</option>
<option value="en-GB" selected="selected">English (UK) - English (UK)</option>
<option value="en">English (US)</option>
<option value="fr-CA">French (Canada) - français (Canada)</option>
<option value="fr">French (France) - français (France)</option>
</select>
这是我的观点
@login_required
def name_details_add(request):
language_versions = LanguageVersion.objects.filter(user=request.user)
available_languages = get_available_language_details(language_versions, request.user.userprofile.language_preference)
name_details_num = request.user.namedetails_set.count()
preview_labels = get_name_details_labels(available_languages)
if name_details_num >= settings.MAX_NAME_DETAILS:
return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)
if request.method == 'GET':
form = NameDetailsForm(
available_languages=available_languages,
language_preference=request.user.userprofile.language_preference,)
elif request.method == 'POST':
form = NameDetailsForm(
available_languages=available_languages,
language_preference=request.user.userprofile.language_preference,
data=request.POST)
if form.is_valid() and name_details_num < settings.MAX_NAME_DETAILS:
name_detail = NameDetails(user=request.user)
name_detail.fill(form.cleaned_data)
name_detail.save()
messages.success(request, _('successfully added.'))
return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)
你可以这样做:
if request.POST['language_code'] == 'fr-CA':
return HttpResponseRedirect('/some/other/page/')
您可以在表单上为LanguageVersion fk添加字段验证,并在视图中访问该信息:
class NameDetailsForm(forms.ModelForm):
...
def clean_language_version(self):
lang = self.cleaned_data.get('language_version')
if LanguageVersion.objects.filter(language_code=lang, language_code_disabled=True).exists():
raise forms.ValidationError("Language code disabled")
return lang
if form.is_valid() ... :
...
elif form['language_version'].errors:
return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)
然后在视图中:
class NameDetailsForm(forms.ModelForm):
...
def clean_language_version(self):
lang = self.cleaned_data.get('language_version')
if LanguageVersion.objects.filter(language_code=lang, language_code_disabled=True).exists():
raise forms.ValidationError("Language code disabled")
return lang
if form.is_valid() ... :
...
elif form['language_version'].errors:
return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)
刚果民主共和国,感谢你的回应。无法使代码正常工作。表单只是提交。@user1261774您可以插入
导入pdb;pdb.set_trace()
在clean_language_version函数中,查看它为什么会传递if.xyres,谢谢。此代码确实有效。但是如何从LanguageVersion模型中调用语言代码禁用,因为将有许多禁用的语言代码?