gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:16:43 25 4
gpt4 key购买 nike

我正在使用 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>

表单提交工作正常。

但是,我需要进行更改,以便如果用户选择 fr-CA 的选择列表选项然后提交表单,那么我不想添加记录并将用户重定向到不同的表单 -返回重定向(settings.MENU_DETAIL_LINK_NAME_DETAILS)。

本质上,如果 LanguageVersion 模型的 bool 字段 language_code_disabled 为 true,则用户应该无法添加语言版本。

我不太确定该怎么做。我一直在这个问题上兜圈子,所以我对如何实现这一目标感到困惑。

这是我的模型代码:

class NameDetails(models.Model, FillableModelWithLanguageVersion):
user = models.ForeignKey(User)
language_version = models.ForeignKey('LanguageVersion')
name_details_prefix_title = models.CharField(null=True, blank=True, max_length=25)
name_details_first_name = models.CharField(null=False, blank=False, max_length=50)
name_details_middle_name = models.CharField(null=True, blank=True, max_length=100)
name_details_last_name = models.CharField(null=False, blank=False, max_length=60)
name_details_suffix_title = models.CharField(null=True, blank=True, max_length=25)

class LanguageVersion(models.Model):
"""Language version selection for a user"""
user = models.ForeignKey(User)
language_code = models.CharField(max_length=32)
language_code_disabled = models.BooleanField(default=False)

这是我的观点.py

@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)

我希望有人能帮助我解决这个问题。

我需要找出如何从 language_code_disabled 为 True 的用户的 LanguageVersions 模型中调用所有语言代码的列表。

我是否可以编写一个循环遍历语言版本的函数,或者可以编写一个简单的调用函数来返回禁用的语言代码列表,例如 en、fr、fr-CA、de ?

disabled_language_versions = LanguageVersion.objects.filter(user=request.user, language_code_disabled=True)

最佳答案

您可以在表单上添加 LanguageVersion fk 的字段验证,并在 View 中访问该信息:

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

然后在 View 中:

if form.is_valid() ... :
...
elif form['language_version'].errors:
return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)

关于python - django - 如果提交的表单值为 X,则阻止表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27594625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com