Python

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

2018-12-23  本文已影响0人  摘花是个好习惯

第一个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()方法

@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

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();
        }
上一篇 下一篇

猜你喜欢

热点阅读