Django ChoiceField “验证给定值是否存在于选项列表中。”
我想要一个 ChoiceField(所以我可以在视图中输入选项),但我不希望 Django 检查选项是否在选项列表中。解释为什么很复杂,但这就是我需要的。这将如何实现?
Django ChoiceField “验证给定值是否存在于选项列表中。”
我想要一个 ChoiceField(所以我可以在视图中输入选项),但我不希望 Django 检查选项是否在选项列表中。解释为什么很复杂,但这就是我需要的。这将如何实现?
您可以创建自定义ChoiceField
并覆盖以跳过验证:
class ChoiceFieldNoValidation(ChoiceField):
def validate(self, value):
pass
我想知道你的用例,因为我真的想不出你需要这个的任何理由。
编辑:测试,制作表格:
class TestForm(forms.Form):
choice = ChoiceFieldNoValidation(choices=[('one', 'One'), ('two', 'Two')])
提供“无效”数据,并查看表单是否仍然有效:
form = TestForm({'choice': 'not-a-valid-choice'})
form.is_valid() # True
从外观上看,最好的方法是创建一个forms.Charfield
并使用一个forms.Select
小部件。这是一个例子:
from django import forms
class PurchaserChoiceForm(forms.ModelForm):
floor = forms.CharField(required=False, widget=forms.Select(choices=[]))
class Meta:
model = PurchaserChoice
fields = ['model', ]
出于某种原因,仅覆盖验证器并没有为我解决问题。
作为另一种选择,您可以编写自己的验证器
from django.core.exceptions import ValidationError
def validate_all_choices(value):
# here have your custom logic
pass
然后以你的形式
class MyForm(forms.Form):
my_field = forms.ChoiceField(validators=[validate_all_choices])
编辑:另一个选项可以将字段定义为 aCharField
但然后在模板中手动将其呈现为您选择的选择。这样,它可以接受所有内容,而无需自定义验证器