django ORM中的复选MultiSelectField的使用

  在django ORM的使用中,经常会出现选择的情况,例如:

class person(odels.Model):
    sex_type = ((‘male‘,u‘男‘), (‘female‘,u‘女‘))
    sex = models.CharField(u"性别", choices=sex_type,max_length=32)

  但并不是所有的选择都是只有一个结果的,例如

class person(odels.Model):
    language_choices= ((‘chinese‘,u‘汉语‘), (‘english‘,u‘英语‘),(‘french‘,‘法语‘))
    language = models.CharField(u"使用语言", choices=language_choices,max_length=32)

  很明显,假如一个人又会汉语,又会英语,那么这个choices就不能上线我们的目的了,那么久可以使用MultiSelectField来实现了,例如

class person(odels.Model):
    language_choices= ((‘chinese‘,u‘汉语‘), (‘english‘,u‘英语‘),(‘french‘,‘法语‘))
    language = MultiSelectField(u"使用语言",choices=language_choices)

  需要注意的几点:

  1:MultiSelectField不支持list_display,如果在list_display中添加MultiSelectField的项就会出现报错,所以当你想在admin页管理你的数据库资料时,不能在查看页面查看到MultiSelectField的项的内容。

  2:当你想使用form直接在前端生成编辑或查看数据库内容的页面时,MultiSelectField的项不能直接显示出来,而是需要进行特殊的处理,其格式如下(其中provider表示query对象,field表示MultiSelectField项)

{% for value, text in providers.field.choices %}
  <div class="ui slider checkbox">
    <input id="id_providers_{{ forloop.counter0 }}" name="{{ form.providers.name }}" type="checkbox" value="{{ value }}"{% if value in checked_providers %} checked="checked"{% endif %}>
    <label>{{ text }}</label>
  </div>
{% endfor %}

  3:在使用filter对MultiSelectField项进行查询时需要注意MultiSelectField项在数据库内存的是一个列表类型的数据,如果查询选择的项和你的查询条件完全相同的数据直接使用

models.Person.objects.filter(language=[‘chinese‘])

但如果想要filter到所有选择了其中一个选项的数据(包括只选择了该选项的数据和同时选择了该选项和其他选项的数据),直接使用django提供的查询方法就不行了,那么可以使用Q语句来实现查询,其形式为()

models.persom.objects.filter( Q(language=‘chinese‘)|Q(language__startswith=‘chinese,‘)|Q(language__endswith=‘,chinese‘)|Q(language__contains = ‘,chinese,‘)
时间: 2024-10-24 04:30:55

django ORM中的复选MultiSelectField的使用的相关文章

在php中验证复选框

PHP接收多个同名复选框信息不像ASP那样自动转换成为数组,这给使用带来了一定不便.但是还是有解决办法的,就是利用javascript做一下预处理.多个同名复选框在javascript中还是以数组的形式存在的,所以在表单提交之前可以利用javascript把复选框中的信息组合成一个字符数组赋值给表单中的隐藏元素,然后用PHP中的explode函数解析此数组,这样就可以实现复选框信息的传递了.下面举例说明. 假设有这样一个表单: <form name="form1" id=&quo

QTableView中嵌入复选框CheckBox 的四种方法总结

搜索了一下,QTableView中嵌入复选框CheckBox方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简单,通常用这种方法. 第三种只适合静态显示静态数据用 第四种比较适合扩展,它除了可以嵌入复选框,还可以通过paint()绘制其它控件,图片等自定义风格. 第一种方法是:编辑委托法 这种方法直接利用委托中重载createEditor(),激活QCheckBox,这个缺点是必须双击/选中,才能显示CheckBox控件.一般不满足我们实际中的直接显示的需要.可以

django orm中 get 与filter的区别

django orm中 get 与filter的区别: 以前误以为get与filter的区别仅仅是filter返回多条,而get仅支持一条记录,直到使用related_name属性 才发现,两者的差异远不止如此,最本质的区别是 filter返回的值是一个queryset对象, 而get 返回值是一个定义的model对象, 使用get 返回的结果去访问子表对象可以成功,而使用filter就会出错, 是因为queryset 对象没有realtaed_name属性,无法回溯到子表

[Django]orm中的外键级联删除

这里的系统环境为django1.6   os为win7 今天有个需求说的是添加一个地区表,然后用外键和几个非常重要的实体表来做关联(地区表作为其他表的外键),写完地区的删除操作的时候,测试了下代码,功能正常.可是眼睛移动到控制台输出的时候傻了 connexesql ->DELETE FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `ad_ad` WHERE `ad

C# Word中插入复选框选中符号

object fontname = "Wingdings 2";  object uic = true;    doc.Bookmarks.get_Item(ref lblmark).Range.InsertSymbol(-4014, ref fontname, ref uic, ref missing); C# Word中插入复选框选中符号,布布扣,bubuko.com

jQuery+SpringMVC中的复选框选择与传值

一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked");$("#cb1").attr("checked",true); 对应的jQuery函数,主要完成三个功能: 1.第一个复选框选中或取消选中,则下面的复选框为全选或取消全选: 2.当下面的复选框全部选中时,则将第一个复选框设置为选中,当下面的复选框中有一个没

nodetree中 前面复选框禁用插件

nodetree中 前面复选框的去掉插件 extendTreeCheck.js 1 /** 2 * tree方法扩展 3 * 作者:小雪转中雪 4 */ 5 $.extend($.fn.tree.methods, { 6 /** 7 * 激活复选框 8 * @param {Object} jq 9 * @param {Object} target 10 */ 11 enableCheck : function(jq, target) { 12 return jq.each(function(){

Itext填写pdf中的复选框

使用Acrobat制作模板,在赋值的时候发现一个问题,对于模板中的复选框CheckBox,使用了默认导入值"是",结果复选框内显示的是一个叉而不是一个√. 翻看了很多的资料,也找不到解决的方法,如果有哪位大神知道的,能不能指导一下,不胜感激. 在这里说一下我自己的解决方法: 就是利用反向思维,不是需要在复选框内打勾吗?那么我就先将模板中的复选框全部打上√. 然后再赋值"否",问题可以解决,就是麻烦了很多. 原文地址:https://www.cnblogs.com/c

jquery中input复选框的checked属性

在今日的多选,反选,全选试验中,关于通过jQuery方法来实现复选框的选中与否问题,我有了以下发现: 1.不能通过.css('checked','checked')方法来设置或者获取复选框的checked属性,在控制台打印输出.css('checked'),结果为undefined, 不管在HTML中是否设置了checked='checked'; 2.通过attr添加属性即.attr('checked','abc'),会给HTML中input所在处添加checked='checked'这样的代码