美文网首页
Django-select下拉菜单的显示与保存

Django-select下拉菜单的显示与保存

作者: 钻石王老师 | 来源:发表于2021-11-06 21:00 被阅读0次

    Django-select下拉菜单的显示与保存:

    场景应用

    用于数据表有使用外键,然后又需要在前端展示,增删改查的时候改如何写。
    例子

    image.png
    user表,其中部门使用外键(dept表的id)多对一的关系(下文用了emp雇员,方法一样)

    想要达到的效果

    • 在前端表单展示用户的信息,包括部门信息
    • 可修改部门,修改的select下拉菜单可选已经录入的部门信息,下拉单选


      image.png

    models文件

    class dept(models.Model):
        deptname = models.CharField(max_length=20, null=True, verbose_name="部门名称")
    
    class emp(models.Model):
        username = models.CharField(max_length=20, verbose_name="姓名")   #姓名
        dept = models.ForeignKey(dept, on_delete=models.CASCADE, verbose_name="所在部门")      #关联部门
    

    说明:这里不用多解释,就是普通定义emp表和dept表,注意emp的dept部门字段使用的ForeignKey多对一关系,去关联dept表的主键(dept没有重新定义主键,则是默认的主键id)

    views文件

    @login_required
    def userAdd(request):
        if request.method == 'GET':
            deptlist = dept.objects.all()
            return render(request, 'userAdd.html', locals())
        elif request.method == 'POST':
            username = request.POST.get('username')
            dept = request.POST.get("dept")
    
            emp = Emp()
            emp.username = username
            emp.dept_id = dept
    
            emp.save()
            return redirect(reverse('sta:userList'))
    

    说明:这里的例子是保存时候的操作,既要展示不同部门的下拉菜单,又要能够保存成功。需要注意以下地方:
    1.要重新定义get,实现当加载网页的时候能够展示已保存的部门信息,所以有个deptlist = dept.objects.all(),在html中要使用deptlist取部门表中的值。
    2.当使用POST要保存的时候还是按照正常逻辑,先从html取对应的值,然后新建一个emp()对象,给对应字段赋值后保存。
    3.保存部门的时候,对于外键,emp表是主动增加了一个叫做emp_id的字段,所以要使用emp.dept_id = dept,将获取到的dept(id)传给emp的dept_id字段。

    html文件

    <tr>
        <td valign="middle" align="right">所在部门</td>
        <td>
        <select class="form-control" id="dept" name="dept">
        <option selected="" name="sdept">选择所在部门</option>
            {% for i in deptlist.values %}
               <option value="{{ i.id }}" name="sdept">{{ i.deptname }}</option>
            {% endfor %}
        </select>
        </td>
    </tr>
    

    说明:下拉单选菜单使用select,option,使用for循环从deptlist中取部门的值展示出来。所以是{% for i in deptlist.values %},注意显示的字段使用deptname,对应value使用id来用来存储在数据表中。

    相关文章

      网友评论

          本文标题:Django-select下拉菜单的显示与保存

          本文链接:https://www.haomeiwen.com/subject/wcojzltx.html