Python 如何验证Django 1.7中的下拉列表?

Python 如何验证Django 1.7中的下拉列表?,python,django,Python,Django,我有一个Django表单,它在创建验证时不记录下拉列表值。相反,验证读取的值始终为null。因此,这将触发验证: This field cannot be null. 我可能做错了什么?我是Django框架的新手,因此如果您有任何帮助,我将不胜感激。这是我的forms.py文件: from django import forms from reviews.models import Rating, Review CHOICES = ( (1,'One Star'), (2,

我有一个Django表单,它在创建验证时不记录下拉列表值。相反,验证读取的值始终为null。因此,这将触发验证:

This field cannot be null.
我可能做错了什么?我是Django框架的新手,因此如果您有任何帮助,我将不胜感激。这是我的forms.py文件:

from django import forms 
from reviews.models import Rating, Review

CHOICES = (
    (1,'One Star'),
    (2,'Two Star'),
    (3,'Three Star'),
    (4,'Four Star'),
    (5,'Five Star')
)

SERVICES = (
(0, 'Select a Service Name or Start typing'),
(85, 'Service1'),
(86, 'Service2'),
(88, 'Service3'),
(89, 'Service4'),
(90, 'Service5')
)

class ReviewForm(forms.ModelForm):
    serv_id = forms.ChoiceField(required=True, choices= SERVICES, widget=forms.Select(attrs={'class':'form-control'}))
    rating_value = forms.ChoiceField(required = True, choices = CHOICES,  widget=forms.RadioSelect(attrs={'class' : ''}))
    review_text = forms.CharField(required=True, widget=forms.Textarea(attrs={'class' : 'form-control', 'placeholder': 'Write Review', 'rows':5}))

    class Meta:
        model = Review
        fields = ('rating_value', 'review_text', 'serv_id',)

    def clean_serv_id(self):
        serv_id = self.cleaned_data['serv_id']
        if serv_id <= 0:
            raise forms.ValidationError("You need to select a Service.")

只要用户从下拉id整数值中选择一个选项,它就会工作。问题是当id=0时,验证不会触发。用户没有选择服务:

您需要从clean\u serv\u id返回值


我本来打算早点发这个的。。问题是我的验证中的比较运算符不正确-哦,我确实需要返回serv_id,我只是在出于某种原因尝试调试之后从原始代码中删除了它。。显然,我在小部件中用作值的数值0在ChoiceField中被解释为0

以下是有效的验证。注意,我还必须将比较运算符更改为==:

def clean_serv_id(self):
        serv_id = self.cleaned_data['serv_id']
        if serv_id == "0":
            raise forms.ValidationError("You need to select a Service.")
        else:
            return serv_id

谢谢你的意见。嗯,现在验证永远不会被触发。即使当serv_id等于0时,我也在返回serv_id时没有使用else语句,我得到了相同的错误-验证从未触发。只是添加了它!谢谢你看
def clean_serv_id(self):
        serv_id = self.cleaned_data['serv_id']
        if serv_id == "0":
            raise forms.ValidationError("You need to select a Service.")
        else:
            return serv_id