0

我有这样的表格:

class SearchForm(forms.Form):
    genus = forms.RegexField(
        regex=r'^[a-zA-Z]+$',
        required=False,
    )  
    species = forms.RegexField(
        regex=r'^[a-zA-Z]+$',
        required=False,
    )
    island_group = forms.ModelChoiceField(
        required=False,
        queryset=Locality.objects.values_list('islandgroup', flat=True).distinct('islandgroup'), 

现在,island_group由于我没有返回模型对象,因此我的表单在字段上的验证失败。我需要返回values_list以获取不同的条目。这个表格还有更多内容,这就是我不想使用模型表格的原因。

我的问题是:让我的表单验证的最佳方法是什么?

非常感谢任何帮助。

4

2 回答 2

0

为什么不重写保存方法:在实际保存之前调用一些验证函数?

于 2012-04-20T14:09:43.087 回答
0

我有同样的问题,我现在的解决方案是使用 ChoiceField 而不是 ModelChoiceField。我相信这是有道理的,因为我们不希望用户选择模型实例,但是在一个表列中不同的属性值和相同的属性很可能对应于多个模型实例。

class SearchForm(forms.Form):
    # get the distinct attributes from one column
    entries = Locality.objects.values_list('islandgroup', flat=True).distinct('islandgroup')
    # change the entries to a valid format for choice field
    locality_choices = [(e, e) for e in entries]
    # the actual choice field
    island_group = forms.ChoiceField(
        required=False,
        choices=locality_choices)

这样,Django 的内置验证就完全符合我们的要求,即检查是否从一列中选择了所有可能属性集合中的一个成员。

于 2016-04-14T14:14:39.720 回答