栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django形式有选择,但也有自由文本选项?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django形式有选择,但也有自由文本选项?

我会推荐一种自定义的Widget方法,HTML5允许你使用带有下拉列表的自由文本输入,该下拉列表可以用作“一键通”或“另一写”类型的字段,这就是我的方法:

fields.py

from django import formsclass ListTextWidget(forms.TextInput):    def __init__(self, data_list, name, *args, **kwargs):        super(ListTextWidget, self).__init__(*args, **kwargs)        self._name = name        self._list = data_list        self.attrs.update({'list':'list__%s' % self._name})    def render(self, name, value, attrs=None, renderer=None):        text_html = super(ListTextWidget, self).render(name, value, attrs=attrs)        data_list = '<datalist id="list__%s">' % self._name        for item in self._list: data_list += '<option value="%s">' % item        data_list += '</datalist>'        return (text_html + data_list)

forms.py

from django import formsfrom myapp.fields import ListTextWidgetclass FormForm(forms.Form):   char_field_with_list = forms.CharField(required=True)   def __init__(self, *args, **kwargs):      _country_list = kwargs.pop('data_list', None)      super(FormForm, self).__init__(*args, **kwargs)    # the "name" parameter will allow you to use the same widget more than once in the same    # form, not setting this parameter differently will cuse all inputs display the    # same list.       self.fields['char_field_with_list'].widget = ListTextWidget(data_list=_country_list, name='country-list')

views.py

from myapp.forms import FormFormdef country_form(request):    # instead of hardcoding a list you could make a query of a model, as long as    # it has a __str__() method you should be able to display it.    country_list = ('Mexico', 'USA', 'China', 'France')    form = FormForm(data_list=country_list)    return render(request, 'my_app/country-form.html', {        'form': form    })


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号