Django之model.form创建select标签
前言
之前我们学习了form表单验证用户输入格式和自动创建HTML,那么如果用户创建select标签时怎么办呢,先来看下这个东西:
models.py 数据格式:
class UserInfo(models.Model):
caption=models.CharField(max_length=16)
class UserType(models.Model):
username=models.CharField(max_length=32)
pwd=models.IntegerField
user_type=models.ForeignKey('UserInfo')
views.py:
from django.shortcuts import render, HttpResponse
from s19 import models
from django import forms
# Create your views here.
class IndexForm(forms.Form):
c = [
(1,'ceo'),
(2,'coo'),
]
user_info_id = forms.IntegerField(widget=forms.Select(choices=c))
def index(request):
#创建模拟用户
# for i in range(10):
# models.UserInfo.objects.create(caption='CE'+str(i))
form = IndexForm()
return render(request,'index.html',{'form':form})
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>index</h1>
{{ form.user_info_id }}
</body>
</html>
如果这么写,我们可以看到页面上有select标签实现,但这种方式是在内存里,如果在数据库中我们怎么来实现呢?
数据库提取,通过form实现HTML页面
首先要直到value_list,models中使用会将对象提取为元组模式,我们可以将对象中的id,caption 提取出来.
from django.shortcuts import render, HttpResponse
from s19 import models
from django import forms
# Create your views here.
class IndexForm(forms.Form):
def __init__(self,*args,**kwargs):
super(IndexForm,self).__init__(*args,**kwargs)
self.fields['user_info_id'].widget.choices = models.UserInfo.objects.all().values_list('id','caption')
c = models.UserInfo.objects.all().values_list('id','caption')
user_info_id = forms.IntegerField(widget=forms.Select(choices=c))
def index(request):
# for i in range(10):
# models.UserInfo.objects.create(caption='CE'+str(i))
form = IndexForm()
return render(request,'index.html',{'form':form})
需要注意一点:在上述代码中我们在类中添加了一条构造方法,使用父类的构造方法,将静态字段重新赋值,为什么呢?因为在在IndexForm的类中,我们取值是通过静态字段取值的,django运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!
Django之model.form创建select标签的更多相关文章
- Django 的 model form 组件
Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...
- Django的model form组件
前言 首先对于form组件通过全面的博客介绍,对于form我们应该知道了它的大致用法,这里我们需要明确的一点是,我们定义的form与model其实没有什么关系,只是在逻辑上定义form的时候字段名期的 ...
- Django之model模块创建表完整过程
Django中,与数据库相关的模块是model模块,它提供了一种简单易操作的API方式与数据库交互,它是通过ORM映射的方式来操作数据库,一个类对应数据库一张表,一个类属性,对应该表的一个字段,一个实 ...
- Django的model中创建表
类中的class Meta字段的作用: 第一个作用可以给这个类起名字 在后台的admin中显示这个类名字 class CourseCategory(models.Model): "" ...
- js中创建html标签、加入select下默认的option的value和text、删除select元素节点下全部的OPTION节点
<pre name="code" class="java"> jsp 中的下拉框标签: <s:select name="sjx&qu ...
- python3-开发进阶Django-form组件中model form组件
Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...
- 自定义django model form、admin action
https://www.cnblogs.com/0zcl/archive/2017/03/22/6580279.html 先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin ...
- 14 Django之Form和Model Form组件
一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...
- Django之Model、Form、ModelForm区别
本节内容: 1:Model https://www.cnblogs.com/shuai1991/p/10844662.html 2:Form ...
随机推荐
- mybatis3.0-[topic10-14] -全局配置文件_plugins插件简介/ typeHandlers_类型处理器简介 /enviroments_运行环境 /多数据库支持/mappers_sql映射注册
mybatis3.0-全局配置文件_ 下面为中文官网解释 全局配置文件的标签需要按如下定义的顺序: <!ELEMENT configuration (properties?, setting ...
- POI进行导出时候发现有不可读取的内容
通过后台查询数据,然后使用poi进行导出时候,excel进行打开会出现下面的异常: 但是在WPS中就没有问题, 如果点击否,则不会显示任何内容,点击是,就会弹出来 查看修改记录为: 刚开始也进行了很多 ...
- JavaScript 廖2
HTML表单的输入控件主要有以下几种: 文本框,对应的<input type="text">,用于输入文本: 口令框,对应的<input type="p ...
- django-haystack 安装No local packages or working download links found for setuptools_scm
在虚拟环境中安装drf-haystack时,pip报错 Liang-2:~ langying$ pip install django-haystack Collecting django-haysta ...
- Linux centOS 6 和 centOS 7一些简单的区别
最明显的是,获取网络端口的命令和IP信息的命令不同了 所以刚安装的centos 7 使用ifconfig查看ip时有可能出现-bash: ifconfig: 未找到命令
- GBDT算法梳理
1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第一个基学习器: 根据基学习器的表现对样本进行调整,在之前学习器做 ...
- Planet.Earth.II.EP05.2016
- 关于request.getServletPath(),request.getContextPath()的总结
1. getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括. 2.getContextPath():获取项目的根路径
- java+下载+大文件断点续传
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路:1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...
- leetcode解题报告(17):Missing Number
描述 Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is mis ...