在单个django模型字段中选择多个选项
django-select-multiple-field的Python项目详细描述
在单个django model字段中选择多个选项。想用就用 将多项选择存储在一个字段中,而不使用多对多关系。
使用jquery的multiselect.js插件呈现[1]
[1] | jquery.multi-select.js https://github.com/lou/multi-select |
快速启动
重要
字段属性max_length必须设置为比 期望的最长编码字符串
重要
选项必须是字符串,而不是整数。
在您的型号中,通常添加选择字段选项:
# models.py class Pizza(models.Model): ANCHOVIES = 'a' BLACK_OLIVES = 'b' PEPPERONI = 'p' MOZZARELLA = 'm' TOPPING_CHOICES = ( (ANCHOVIES, 'Anchovies'), (BLACK_OLIVES, 'Black olives'), (PEPPERONI, 'Pepperoni'), (MOZZARELLA, 'Mozzarella'), ) toppings = SelectMultipleField( max_length=10, choices=TOPPING_CHOICES )
像往常一样使用通用视图或模型表单。在模板中,您可以使用常规表单标记:
# template_form.html <form action="" method="post"> {{ form.as_p }} <input type="submit" value="Submit"> </form>
这将呈现以下HTML:
# create.html <form action="" method="post"> <p> <label for="id_toppings">Toppings:</label> <select multiple="multiple" id="id_toppings" name="toppings" class="select-multiple-field"> <option value="a">Anchovies</option> <option value="b">Black olives</option> <option value="p">Pepperoni</option> <option value="m">Mozzarella</option> </select> </p> <input type="submit" value="Submit"> </form>
显示存储的选项
要显示您的选择,您需要解码字段内容。这个罐头 使用模板标记完成:
# templatetags/pizza_tags.py def decode_pie(ingredients): """ Decode pizza pie toppings """ decoder = dict(Pizza.TOPPING_CHOICES) decoded = [decoder[t] for t in ingredients] decoded.sort() return ', '.join(decoded) register.filter('decode_pie', decode_pie)
在模板中,您需要导入标记并使用它们:
# details.html {% load pizza_tags %} {{ pizza.toppings|decode_pie }}
对选项进行编码
选定的选项存储为逗号分隔的文本。考虑 有以下配料的比萨饼。
- Pepperoni
- Mozzarella
它将作为字符字段存储为:
p,m
使用编解码器中的函数将此编码字符串解码为python列表 模块:
>>> from select_multiple_field.codecs import * >>> encoded = 'a,b,c' >>> decoded = decode_csv_to_list(encoded) >>> print decoded [u'a', u'b', u'c'] >>> print type(decoded) <type 'list'>
编码方法可能会限制您搜索选择的能力。
示例应用程序
如果您下载了tarball,就会包含一个示例应用程序。您可以这样尝试:
$ pwd /home/user/teststuff/django-select-multiple-field $ cd test_projects/django14 $ python manage.py syncdb $ python manage.py runserver Validating models... 0 errors found Django version 1.4.19, using settings 'django14.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
故障排除
django select multiple字段包含两个测试套件。一个用于现场,一个用于Django 1.4.19项目中现场的实施。
您可以下载tarball并在setup.py:
中运行“test”来运行现场测试$ python setup.py test
您可以以类似的方式运行django 1.4.19演示测试:
$ python setup.py test_demo
不用说你需要安装django 1.4.19或更高版本。
虫子!救命啊!!
如果您发现此软件中有任何错误,请通过github报告 发出追踪器[2]或向code@kelvinwong.ca发送电子邮件。任何严重的 安全漏洞只能通过电子邮件报告。
[2] | Django-select-multiple-field issue tracker https://github.com/kelvinwong-ca/django-select-multiple-field/issues |