覆盖Django自定义表单中的clean方法
我已经编写了一个自定义小部件覆盖Django自定义表单中的clean方法,django,django-forms,django-widget,Django,Django Forms,Django Widget,我已经编写了一个自定义小部件 class AutoCompleteWidget(widgets.TextInput): """ widget to show an autocomplete box which returns a list on nodes available to be tagged """ def render(self, name, value, attrs=None): final_attrs = self.build_attrs(attrs, name=name
class AutoCompleteWidget(widgets.TextInput):
"""
widget to show an autocomplete box which returns a list on nodes available to be tagged
"""
def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, name=name)
if not self.attrs.has_key('id'):
final_attrs['id'] = 'id_%s' % name
if not value: value = '[]'
jquery = u"""
<script type="text/javascript">
$("#%s").tokenInput('%s', {
hintText: "Enter the word",
noResultsText: "No results",
prePopulate: %s,
searchingText: "Searching..."
});
$("body").focus();
</script>
""" % (final_attrs['id'], reverse('ajax_autocomplete'), value)
output = super(AutoTagWidget, self).render(name, "", attrs)
return output + mark_safe(jquery)
class MyForm(forms.Form):
AutoComplete = forms.CharField(widget=AutoCompleteWidget)
为此,我将表单字段的初始值设置为这个json字符串
jquery_string = ['name': 'some name', 'id': 'some id']
form = MyForm(initial={'AutoComplete':jquery_string})
提交表单时,AutoComplete的值以逗号分隔的选定ID列表的形式返回,例如12、45、43、66,如果我需要的话
但是,如果表单中存在错误,例如未输入必填字段,则自动完成字段的值现在为12,45,43,66,而不是它所需的json字符串
解决这个问题的最好办法是什么。我正在考虑覆盖form类中的clean方法,但我不确定如何确定是否有任何其他元素返回了错误。e、 g
if forms.errors
form.cleaned_date['autocomplete'] = json string
return form.cleaned_data
谢谢那么,为什么不能用合适的字段清理方法进行清理呢 我还使用相同的技术使用自定义小部件生成自动完成字段。 当用户从小部件中选择某个结果时,我的js代码用正确的id填充隐藏的“id”字段,然后我有了这个字段清理方法:
def clean_category(self):
try:
category = Category.objects.get(id=int(self.cleaned_data['category']))
except:
raise forms.ValidationError("Such category doesn't exist")
return category
def clean_category(self):
try:
category = Category.objects.get(id=int(self.cleaned_data['category']))
except:
raise forms.ValidationError("Such category doesn't exist")
return category