我的表单中的数据清理有问题。在我的单个字段清理方法中调用调试器时,清理后的版本中有一半数据丢失。下面是代码的简化版本:
class MealForm(forms.Form):
def __init__(self, *args, **kwargs):
# call super(), do some stuff, then declare some fields:
self.fields['meal'] = forms.CharField(required=True, max_length=255)
self.fields['sugar'] = forms.CharField(required=False, max_length=255)
self.fields['salt'] = forms.CharField(required=False, max_length=255)
def clean_meal(self):
pdb.set_trace() # insert a breakpoint to inspect self.cleaned_data.keys() and self.data.keys()
meal_value = self.cleaned_data['meal']
# dict of all the various utility functions because python doesn't have 'switch'
process_meal_type = {
'dessert': self.process_sugar,
'main course': self.process_salt,
}
try:
process_meal_type[meal_value]()
except KeyError:
raise forms.ValidationError( "Incorrect meal type: " + str(meal_value) )
return meal_value
def process_sugar(self):
if not self.cleaned_data.get('sugar'):
raise ValidationError ( "Desserts must contain sugar")
else:
do_something_with_the_sugar_data()
如果我发表评论
clean_meal
并在
clean
,我注意到
self.cleaned_data
如预期的那样:所有表单字段都存在并已入账。我不是给个人打电话
clean_*
方法。
发生什么事?