在Web应用程序中开发编写功能时,时常用到获取数据库中的数据并将值初始化在HTML中的标签上。

1、Form

  1. from django.forms import Form
  2. from django.forms import widgets
  3. from django.forms import fields
  4. from django.core.validators import RegexValidator
  5.  
  6. class MyForm(Form):
  7. user = fields.CharField()
  8.  
  9. city = fields.ChoiceField(
  10. choices=((1, '上海'), (2, '北京'),),
  11. widget=widgets.Select
  12. )

2、views

  1. from django.shortcuts import render, redirect
  2. from .forms import MyForm
  3.  
  4. def index(request):
  5. if request.method == "GET":
  6. values = {'user': 'root', 'city': 2}
  7. obj = MyForm(values)
  8.  
  9. return render(request, 'index.html', {'form': obj})
  10. elif request.method == "POST":
  11. return redirect('http://www.google.com')
  12. else:
  13. return redirect('http://www.google.com')

3、HTML

  1. <form method="POST" enctype="multipart/form-data">
  2. {% csrf_token %}
  3. <p>{{ form.user }} {{ form.user.errors }}</p>
  4. <p>{{ form.city }} {{ form.city.errors }}</p>
  5.  
  6. <input type="submit"/>
  7. </form>

  initial

在使用选择标签时,需要注意choices的选项可以从数据库中获取,但是由于是静态字段 ***获取的值无法实时更新***,那么需要自定义构造方法从而达到此目的。

  1. 方法一:(推荐)
  2.  
  3. from django.forms import Form
  4. from django.forms import widgets
  5. from django.forms import fields
  6. from django.core.validators import RegexValidator
  7.  
  8. class MyForm(Form):
  9.  
  10. user = fields.ChoiceField(
  11. # choices=((1, '上海'), (2, '北京'),),
  12. initial=2,
  13. widget=widgets.Select
  14. )
  15.  
  16. def __init__(self, *args, **kwargs):
          # 拷贝所有的静态字段,赋值给self.fields
  17. super(MyForm,self).__init__(*args, **kwargs)
  18. self.fields['user'].widget.choices = models.Classes.objects.all().value_list('id','caption')

  

  1. 方式二:
  2.  
  3. 使用django提供的ModelChoiceFieldModelMultipleChoiceField字段来实现
  4.  
  5. from django import forms
  6. from django.forms import fields
  7. from django.forms import widgets
  8. from django.forms import models as form_model
  9. from django.core.exceptions import ValidationError
  10. from django.core.validators import RegexValidator
  11.  
  12. class FInfo(forms.Form):
  13. authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())
  14. # authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all())

  

五、自定义配置

1、在settings中:

2、导入settings

  1. from django.conf import settings

   3、使用

六、多对多修改两种方式(用Form)

  1. def editteacher(request,nid):
  2. obj = models.UserInfo.objects.filter(id=nid, ut_id=1).first()
  3. # print(obj.username)
  4. if not obj:
  5. return redirect("/teacherindex/")
  6. if request.method=="GET":
  7. print([obj.id for obj in obj.teacher_classes.all()]) #[2] 拿到select框的id是为了要做默认显示的
  8. form = TeacherForm(initial={"username":obj.username,"password":obj.password,"email":obj.email,"teacher_classes":[obj.id for obj in obj.teacher_classes.all()]}) #就让显示一个input框,并且带有原来哪一行的内容
  9. return render(request, "editteacher.html", {"form":form})
  10. else:
  11. form = TeacherForm(data=request.POST)
  12. if form.is_valid():#开始校验,注意这要加括号
  13. cls_list = form.cleaned_data.pop("teacher_classes")
  14. print(cls_list)
  15. models.UserInfo.objects.filter(id=nid).update(**form.cleaned_data)
  16. obj.teacher_classes.set(cls_list) #更新第三张表
  17. return redirect("/teacherindex/")
  18. else:
  19. return render(request, "editteacher.html", {"form":form})

  

七、多对多添加(用Form)

  1. def addteacher(request):
  2. if request.method=="GET":
  3. form = TeacherForm() #只是让显示一个input框
  4. return render(request, "addteacher.html", {"form":form})
  5. else:
  6. form = TeacherForm(data=request.POST)
  7. # print(form) #<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
  8. if form.is_valid():# 开始验证
  9. # print('执行成功',form.cleaned_data) # 所有匹配成功,字典
  10. # # {'username': 'ghf', 'password': '435', 'email': 'fddfg@qq.com', 'teacher_classes': ['4']}
  11. cls_list = form.cleaned_data.pop("teacher_classes")
  12. print("============id",cls_list)
  13. form.cleaned_data['ut_id'] = 1
  14. #创建新老师的对象
  15. teacher_obj = models.UserInfo.objects.create(**form.cleaned_data)
  16. #创建新老师和班级的关系
  17. teacher_obj.teacher_classes.add(*cls_list) #以前添加的是对象,现在也可以吧id添加进去
  18. return redirect("/teacherindex/")
  19. else:
  20. # print("=====?",form.errors,type(form.errors))#返回失败的结果
  21. # print(form.errors["username"][0]) #拿到返回失败的结果,渲染到页面
  22. return render(request, "addteacher.html", {"form":form})

  

下拉框 -------> 初始化数据的更多相关文章

  1. Extjs 中combobox下拉框初始化赋值

    近日在工作中遇到一个需求,要求页面初始化的时候给dataGrid表插入一条数据. 前端使用的是Extjs框架,dataGrid表有四列,其中三列是类型为textbox,普通文本框,另外一列类型是com ...

  2. Python+selenium之获取文本值和下拉框选择数据

    Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...

  3. easyui的combobox下拉框初始化默认值以及保持该值一直显示的方法

    easyui的combobox下拉框默认初始值是空,下面是实现从远程加载数据之后初始化默认值,以及让该值一直排在下拉框的最顶部的方式. 目前的需求是需要在初始化的时候添加"全部数据库&quo ...

  4. bootstrap-multiselect.js多选下拉框初始化时默认选中初始值

    bootstrap-multiselect.js多选下拉框默认值设置 一.案例数据格式  二.HTML代码 <select id="msgRoles" multiple=&q ...

  5. easy ui 下拉级联效果 ,下拉框绑定数据select控件

    html代码: ①两个下拉框,一个是省,另一个市 <tr> <td>省:</td> <td> <select id="ProvinceI ...

  6. easy ui 下拉框绑定数据select控件

    easy ui 中的下拉框控件叫做select,具体代码如下: html代码:①.这是一个公司等级的下拉框 <tr> <td>公司等级:</td> <td&g ...

  7. bootstrap selectpicker控件select下拉框动态数据无法回显的问题

    有关于selectpicker下拉框数据回显的问题,当查看一个对象的属性的时候, 发现有关于selectpicker的下拉框并没有将返回的数据进行回显,显示的都是请选择, 经查证,当查看属性的时候,他 ...

  8. easyui datagrid combobox下拉框获取数据问题

    最近在使用easyui的datagrid,在可编辑表格中添加一个下拉框,查了下API,可以设置type : 'combobox',来做下拉框,这下拉框是有了,可是这后台数据怎么传过来呢,通过查API可 ...

  9. select下拉框的数据回显

    需求描述:select框,下拉后又很多的选项,选择一个,根绝后台代码做查询,完成之后,页面上的select框还是之前选的那个值 解决思路:select本质就是 value和text一一对应,根据你的s ...

随机推荐

  1. SQLServer之修改CHECK约束

    使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...

  2. 我的第一个python web开发框架(34)——后台管理系统权限设计

    框架底层和接口终于改造完成了,小白再次找到老菜. 小白:老大,上次你对后台权限系统简单的讲了一下,我一点头绪都没有,现在有空完整的说一说吗? 老菜:说到权限系统,要讲明白真不容易,权限系统并不是越复杂 ...

  3. [原创]GDB调试指南-断点设置

    前言 上篇<GDB调试指南-启动调试>我们讲到了GDB启动调试的多种方式,分别应用于多种场景.今天我们来介绍一下断点设置的多种方式. 为何要设置断点 在介绍之前,我们首先需要了解,为什么需 ...

  4. DISK 100% BUSY,谁造成的?(ok)

    iostat等命令看到的是系统级的统计,比如下例中我们看到/dev/sdb很忙,如果要追查是哪个进程导致的I/O繁忙,应该怎么办? # iostat -xd ... Device: rrqm/s wr ...

  5. Hystrix是个什么玩意儿

    1. 什么是Hystrix Hystrix是Netflix的一个开源框架,地址如下:https://github.com/Netflix/Hystrix 中文名为“豪猪”,即平时很温顺,在感受到危险的 ...

  6. 不安分的 Go 语言开始入侵 Web 前端领域了!( WebAssembly )

    参考:https://blog.csdn.net/csdnnews/article/details/84038848 从 Go 语言诞生以来,它就开始不断侵蚀 Java .C.C++ 语言的领地.今年 ...

  7. 强大的scrollReveal库,炫酷的页面缓入效果。

    首先我问来看一下这个强大的插件能做出什么效果,下面是我找的一个网站: http://kepler.gl/#/, 接下来看看官网给出的效果:https://scrollrevealjs.org/. 是不 ...

  8. 理解mysql执行多表联合查询

    阅读目录 一:inner join(内连接) 二:left join(左连接) 三:right join(右连接) 四:cross join(交叉连接) 五:union操作 六:node+mysql ...

  9. 【原创】分布式之大话CAP

    引言 本文翻译自博客 http://ksat.me/a-plain-english-introduction-to-cap-theorem/ 博主觉得这个故事讲的生动活泼,因此翻译来给大家分享,顺便加 ...

  10. Kubernetes(基础 一):进程

    容器其实是一种沙盒技术.顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术.这样,应用与应用之间,就因为有了边界而不至于相互干扰:而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 ...