Django系列之form渲染表单后css样式丢失
最通用的form写法
我们经常看各大网站上写这样的form写法
class SYSAdminPhysicalForm(forms.ModelForm):
'''
this form for idc's admin
'''
class Meta:
model = models.Machinepro
exclude = ["m_inside_ip","m_outside_ip","order"]
business_unit = forms.CharField(required=False,label="所属业务",disabled=True,)
def __init__(self, *args, **kwargs):
super(SYSAdminPhysicalForm, self).__init__(*args, **kwargs)
for field_name in self.base_fields:
field = self.base_fields[field_name]
if field_name in ["m_ipmi_user","m_ipmi_passwd"]:
field.widget.attrs.update({'class': 'form-control'})
else:
field.widget.attrs.update({'class': 'form-control',"disabled":True})
写完这个form后,你重启django后第一次通过浏览器打开这个form表单,你会发现css样式是丢失的,特别是我那个disabled属性,一旦丢失,别人就可以修改我的表单了,所以后果非常严重。所以需要采取下面的方法来纠正这个bug
方法1:__new__写法
init__是实例初始化执行,那么我们就改成实例化的时候执行,也就是使用__new
def __new__(cls, *args, **kwargs):
obj = super(SYSAdminPhysicalForm, cls).__new__(cls,*args, **kwargs)
for field_name in obj.base_fields:
field = obj.base_fields[field_name]
if field_name in ["m_ipmi_user","m_ipmi_passwd"]:
field.widget.attrs.update({'class': 'form-control'})
else:
field.widget.attrs.update({'class': 'form-control',"disabled":True})
方法2:fields 替换掉base_fields
这个最简单了,把base_fields直接用fields替换就解决了
def __init__(self, *args, **kwargs):
super(SYSAdminPhysicalForm, self).__init__(*args, **kwargs)
for field_name in self.fields:
field = self.fields[field_name]
if field_name in ["m_ipmi_user","m_ipmi_passwd"]:
field.widget.attrs.update({'class': 'form-control'})
else:
field.widget.attrs.update({'class': 'form-control',"disabled":True})
任选一种方法后,任凭django重启多少回,不管你第几次打开表单页面,都不会丢失css样式啦!
Django系列之form渲染表单后css样式丢失的更多相关文章
- 5.django笔记之form保存表单信息,动态select
作者:刘耀 一.使用form保存用户输入过的信息 场景:例如 如果用户注册,那么他输入n多个表单之后,那么他提交是时候,如果错误返回的时候,那么需要重新再输入表单内容.这样会影响用户体验,所以,使用f ...
- 利用ajaxSubmit()方法实现Form提交表单后回调
1. 背景 最近在工作中,需要实现网页端图片上传到FTP服务器的功能.上传文件是用Form表单提交数据的方法向后台传输文件流,在此遇到了一个问题:后台在处理完图片上传功能后,需要向前台回传是 ...
- Form提交表单后页面刷新不跳转的实现
<form action="" id="" method="post" target="nm_iframe"> ...
- flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因
flask用宏渲染表单模板时,表单提交后,提交的内容符合DataRequired()校验, 但是form.validate_on_submit()返回的是False, 原因可能是表单模板中的<f ...
- jquery.validate和jquery.form配合实现验证表单后AJAX提交
基础代码其实很简单,之后一点一点扩充.最终代码写在最后. 表单: <form action="@Url.Action("AddColumns","Cont ...
- Django - 请求与响应、表单、中间件、上下文处理器
请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...
- ExtJs 第二章,Ext.form.Basic表单操作
1.认识Ext.form.Panel表单面板 Ext.form.field.CheckBox 复选框 checkboxfield Ext.form.CheckBoxGroup 复选框组 ...
- flask 在模板中渲染表单
在模板中渲染表单 为了能够在模板中渲染表单,我们需要把表单类实例传入模板.首先在视图函数里实例化表单类LoginForm,然后再render_template()函数中使用关键脑子参数form将表单实 ...
- struts2官方 中文教程 系列五:处理表单
先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单 即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...
随机推荐
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- 编译 Linux 3.5 内核烧写 Android 4.2.2 到 Tiny4412 开发板
. . . . . 昨天已经编译了 Android 4.2.2 的源码,详见<Ubuntu 14.04 编译 Android 4.2.2 for Tiny4412>一文. 今天我们继续剩下 ...
- 【WPF】绑定Hyperlink超链接
Hyperlink超链接的简单使用 前台XAML: <TextBlock> 说明文字: <Hyperlink NavigateUri="http://www.qq.com& ...
- 基于opencv+Dlib的面部合成(Face Morph)
引自:http://blog.csdn.net/wangxing233/article/details/51549880 零.前言 前段时间看到文章[1]和[2],大概了解了面部合成的基本原理.这两天 ...
- php 超时 解决办法 (Maximum execution time of 30 seconds exceeded)这个问题?
1. 修改是APACHE设置,在PHP.INI中找到一个参数: max_execution_time 将后面的值调大,然后重新启动APACHE服务(centos: service httpd rest ...
- linux刻录iso到u盘
需要的工具:Linux系统.U盘.ISO镜像文件.首先在Linux系统中打开终端,使用dd命令,格式如下:sudo dd if=xxx.iso of=/dev/sdb命令中xxx.iso是你的ISO镜 ...
- mock数据和代码生成
git clone https://gitee.com/fleam/CodeGeneration.git
- 如何能够通过代码来重启Android手机?
String cmd = "su -c reboot";//让手机从启 try { Runtime.getRuntime().exec(cmd); } catch (IOExcep ...
- 实践:C++平台迁移以及如何用C#做C++包装层
在前面,我们看过OpenTK与MOgre,这二个项目都是C#项目,但是他的实现都是C++.他们简单来说就是一个包装层.常见的包装方式有二种,一种就是我们熟知的显式P/Invoke(DllImport) ...
- 【CentOS】CentOS7.0 mysql与卸载
mysql安装: 在使用命令 yum list mysql-server 安装mysql的时候,发现没有mysql的包.这时候,我们需要下载一个 下载包 wget http://repo.mysql. ...