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 下载本章 ...
 
随机推荐
- RabbitMQ文档翻译——Work queues
			
原文链接:https://www.rabbitmq.com/tutorials/tutorial-two-java.html Work Queues (using the Java Client) I ...
 - C语言  ·  x的x次幂结果为10
			
如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...
 - Python time 的应用
			
测试如下: import time print("chenfulin") # 返回格林威治西部的夏令时区 print("time.altzone %d" % t ...
 - 对于PHP中enum的好奇
			
PHP中没有struct.enum这些东西,虽然万能的array用起来很爽,但写出来的代码typo问题很多.可维护性也差,需要更多的测试来辅助,而一旦加上测试的工作量是否还谈得上『爽』就是个问号了. ...
 - if 语句练习    身高体重问题
			
public class d { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...
 - 编译安装Mysql与管理(十四)
			
[教程主题]:编译安装Mysql与管理 [课程录制]: 创E [主要内容] [1]什么是Mysql MyQL是一个开放源码的小型关系型数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被 ...
 - RavenDb学习(五)结果转换
			
)Result Transformers public class Order { public DateTime OrderedAt { get; set; } public Status Stat ...
 - Qt中与文件目录相关操作
			
一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFil ...
 - HBase二级索引与Join
			
转自:http://www.oschina.net/question/12_32573 二级索引与索引Join是Online业务系统要求存储引擎提供的基本特性.RDBMS支持得比较好,NOSQL阵营也 ...
 - TI webench 一款不错的软件
			
之前在一些电子论坛的网站看到过关于TI webench的介绍,今天适用了一下,确实功能很强大,设计内容可以输入你所要设计的内容,包括下面内容: 下图是笔者设计的一个FPGA供电系统,采用5V输入, ...