1
我已經寫了一個自定義的widget在Django定製覆蓋清潔方法窗體
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)
這個小部件使用了jquery function它自動填充基於從數據庫條目的字。您可以通過表單域的inital值設置爲這個JSON字符串
jquery_string = ['name': 'some name', 'id': 'some id']
form = MyForm(initial={'AutoComplete':jquery_string})
的形式預填充設置爲一個JSON字符串預設的初始值
['name': 'some name', 'id': 'some id']
當我這樣做提交表單AutoComplete的值將作爲所選id的逗號分隔列表返回,例如如果我想要的話,12,45,43,66。
但是,如果表單中有錯誤,例如未輸入必填字段,則自動完成字段的值現在爲12,45,43,66,而不是它所需的json字符串。
解決此問題的最佳方法是什麼?我正在考慮覆蓋表單類中的乾淨方法,但我不知道如何找出是否有其他元素返回錯誤。例如
if forms.errors
form.cleaned_date['autocomplete'] = json string
return form.cleaned_data
感謝