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

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文件


    所在部门
    
    
    

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

你可能感兴趣的:(Django-select下拉菜单的显示与保存)