Python django-如果提交的表单值为X,则阻止表单提交

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

我正在使用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">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模型中调用语言代码禁用,因为将有许多禁用的语言代码?