python自定义表单_python-Django:如何构建自定义表单小部件?

通常,我首先从一个现有的小部件继承,添加一个新的所需属性,然后修改一个render方法。 这是我实现的可过滤选择小部件的示例。 过滤是通过jquery mobile完成的。

class FilterableSelectWidget(forms.Select):

def __init__(self, attrs=None, choices=()):

super(FilterableSelectWidget, self).__init__(attrs, choices)

# choices can be any iterable, but we may need to render this widget

# multiple times. Thus, collapse it into a list so it can be consumed

# more than once.

self._data_filter = {}

@property

def data_filter(self):

return self._data_filter

@data_filter.setter

def data_filter(self, attr_dict):

self._data_filter.update(attr_dict)

def render_option(self, selected_choices, option_value, option_label):

option_value = force_text(option_value)

if option_value in selected_choices:

selected_html = mark_safe(' selected="selected"')

if not self.allow_multiple_selected:

# Only allow for a single selection.

selected_choices.remove(option_value)

else:

selected_html = ''

# use self.data_filter

filtertext = self.data_filter.get(option_value)

data_filtertext = 'data-filtertext="{filtertext}"'.\

format(filtertext=filtertext) if filtertext else ''

return format_html('{2}',

option_value,

selected_html,

force_text(option_label),

mark_safe(data_filtertext))

然后在创建表单的视图中,为该字段设置data_filter。

some_form.fields["some_field"] = \

forms.ChoiceField(choices=choices,

widget=FilterableSelectWidget)

some_form.fields["some_field"].widget.data_filter = \

data_filter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值