实现修改数据页面的某些数据的复选框功能

第一个select存放对象字段没有的数据,第二个select存放已经有的数据


{% get_field_obj_list field admin_class form_obj as field_obj_list %}
<select tag="chosen_list" multiple id="id_{{ field.name }}_from" class="filter_select_box">
     {% for obj in field_obj_list %}
          <option value="{{ obj.id }}" ondblclick="MoveEleTo(this, 'id_{{ field.name }}_to', 'id_{{ field.name }}_from')">{{ obj }}</option>
     {% endfor %}
</select>

{% get_field_selected_obj_list field form_obj as field_selected_obj_list %}
<select multiple id="id_{{ field.name }}_to" class="filter_select_box">
    {% for obj in field_selected_obj_list %}
          <option value="{{ obj.id }}"  ondblclick="MoveEleTo(this, 'id_{{ field.name }}_from', 'id_{{ field.name }}_to')">{{ obj }}</option>
    {% endfor %}
</select>

通过简单标签得到两个select的数据
.all() 是具体的字段对象才有的方法,想获得表的字段的所有对象要用rel.model.objects.all()
获得具体字段的对象使用视图函数中传入的instance参数再调用all()方法

  • 注意!rel.model.objects.all()是Django2.0的写法,rel.to.objects.all()是1.0版本的写法
@register.simple_tag
def get_field_obj_list(field, admin_class, form_obj):
    '''返回所有待选数据'''

    # 表结构对象的某个字段
    field_obj = getattr(admin_class.model, field.name)
    # 包括了所有的数据
    all_obj_list = field_obj.rel.model.objects.all()
    # all_obj_list = field_obj.objects.all()


    # 单条数据的对象中的某个字段
    obj_instance_field = getattr(form_obj.instance, field.name)
    selected_obj_list = obj_instance_field.all()

    # 把不在单条数据的的数据存入待选列表中
    standby_obj_list = []
    for obj in all_obj_list:
        if obj not in selected_obj_list:
            standby_obj_list.append(obj)

    return standby_obj_list

@register.simple_tag
def get_field_selected_obj_list(field, form_obj):
    '''返回已选择的数据'''
    field_obj = getattr(form_obj.instance, field.name)
    return field_obj.all()

实现鼠标点击左右调换功能:
原理就时点击左边右边新加一个option标签,左边删除 ele

  • ele = this ,为必传参数
  • 记住做字符串拼接时一定要给属性内容打上双引号
function MoveEleTo(ele, taget_id, new_taget_id) {
            var opt_ele = "<option value='" + $(ele).val() + "' ondblclick=\"MoveEleTo(this, '" + new_taget_id + "', '" + taget_id + "')\">" + $(ele).text() + "</option>";
            console.log(opt_ele)

            $("#" + taget_id).append(opt_ele);
            $(ele).remove();
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,797评论 0 44
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • 儿子从小就不是个省心的娃,用我妈的话说,看他一个,顶别人家十个。特别是上了小学以后,各种问题隔三岔五,想想都是泪。...
    怒放的叶子阅读 648评论 13 10
  • 文/洛小简 你的忧郁 滑落在我的眼角 我却看不出你心中的悲伤 多想让你告诉我 隐藏在心里的隐痛 可是我知道你的倔强...
    洛小简阅读 213评论 0 1
  • xx的问题确实不想多说,也不想再做解释。再多说就是加持她的负能量。我跟她没有任何私人恩怨,现在我对她仍然没有。是,...
    Evaaaa369阅读 168评论 0 0