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

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


{% get_field_obj_list field admin_class form_obj as field_obj_list %}


{% get_field_selected_obj_list field form_obj as field_selected_obj_list %}


通过简单标签得到两个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 = "";
            console.log(opt_ele)

            $("#" + taget_id).append(opt_ele);
            $(ele).remove();
        }

你可能感兴趣的:(实现修改数据页面的某些数据的复选框功能)