python django 表单_Django ModelForm与Form

django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm

关于django的表单系统,主要分两种

基于django.forms.Form

基于django.forms.ModelForm

表单API

表单有两种状态,绑定,未绑定 Form.is_bound()

Form.is_valid()

验证表单数据是否合法,返回True或者False

Form.errors 错误字典

Form.has_error(field,code=None)

Form.initial 在表单未绑定的情况下,为表单字段设置初始值,

>>> f=ContactForm(initial={'subject':'Hi there'})

1

>>>f=ContactForm(initial={'subject':'Hi there'})

Form.has_changed() 检查表单数据是否变化

From.cleaned_data 表单通过验证后,可以使用cleaned_data属性来访问‘清洁’的数据

Form.as_p() 将表单渲染成< p >标签

From.as_ul() 将表单渲染成< ul >标签

From.as_table() 将表单渲染成< table > 标签

但是这些都得自己添加

;< ul >< /ul >标签

设置表单必填行与错误行的样式

Form.error_css_class

Form.required_css_class

from django import forms

class ContactForm(Form):

error_css_class = 'error' #错误行样式在HTML中表示class='error'

required_css_class = 'required' #必填样式在Html中表示clss=‘required’

1

2

3

4

fromdjangoimportforms

classContactForm(Form):

error_css_class='error'#错误行样式在HTML中表示class='error'

required_css_class='required'#必填样式在Html中表示clss=‘required’

然后在css文件中定义error与required类就行了

配置表单元素的HTML id属性,< label >标签

Form.auto_id

>>> f = ContactForm(auto_id=False) #这样在html中表单不包含< label >标签

>>> f = ContactForm(auto_id=True) #在html中表单标签将为每个表单的id

>>> f = ContactForm(auto_id='id_for_%s') #在html中表单标签为id_for_字段id

1

2

3

>>>f=ContactForm(auto_id=False)#这样在html中表单不包含< label >标签

>>>f=ContactForm(auto_id=True)#在html中表单标签将为每个表单的id

>>>f=ContactForm(auto_id='id_for_%s')#在html中表单标签为id_for_字段id

From.prefix 可以为Django表单添加一个命名空间

>>> mother = PersonForm(prefix='mother')

>>> father = PersonForm(prefix='father')

1

2

>>>mother=PersonForm(prefix='mother')

>>>father=PersonForm(prefix='father')

Field.required 表示该字段为必填 缺省为必填项,如需要指定不为必须

>>> f=forms.CharField(required=True)

1

>>>f=forms.CharField(required=True)

Field.label 表示友好的label,表单在页面显示时用到它

name=from.CharField(label="Your name")

1

name=from.CharField(label="Your name")

Field.help_text 显示字段描述文本

Field.error_message 覆盖默认的错误信息

name = forms.CharField(error_messages={'required':'Please enter your name'}) #覆盖required的默认错误信息

1

name=forms.CharField(error_messages={'required':'Please enter your name'})#覆盖required的默认错误信息

widget

widget 负责渲染网页上的HTML表单

设置weidget实例样式 利用widget.attrs

class CommentForm(forms.Form):

name=forms.CharField(widget=forms.TextInput(attrs={'class':'special'}))

comment = forms.CharField(widget= forms.TextInput(attrs={'size':'40'}))

1

2

3

classCommentForm(forms.Form):

name=forms.CharField(widget=forms.TextInput(attrs={'class':'special'}))

comment=forms.CharField(widget=forms.TextInput(attrs={'size':'40'}))

自定义了name字段的输入样式为类 special

comment更改的大小为40

内建的weidget

TextInput

NumberInput

EmailInput

URLInput

PasswprdInput

HiddenInput

DateInput 日期

DateTimeInput 日期/时间

TimeInput 时间

Textarea

CheckboxInput

Select

NullBooleanSelect 渲染成 unknown,yes,no三个选项

SelectMultiple

RadioSelect

CheckboxSelectMultiple 复选框列表

FileInput 文件上传

SelectDateWidget

ModelForm表单

from django.forms import ModelForm

from myapp.models import Article

class ArticleForm(ModelForm):

class Meta:

model = Article #表单对应的model

fields = ['pub_date', 'headline', 'content', 'reporter'] #表单中显示的字段,对应models.py中对应的字段

1

2

3

4

5

6

fromdjango.formsimportModelForm

frommyapp.modelsimportArticle

classArticleForm(ModelForm):

classMeta:

model=Article#表单对应的model

fields=['pub_date','headline','content','reporter']#表单中显示的字段,对应models.py中对应的字段

使用的时候可以如下:

>>>form = ArticleForm()

>>>article = Article.objects.get(pk=1)

>>>form = ArticleForm(instance = article) #赋值instance可以使form表单是可以接受对象的数据

1

2

3

>>>form=ArticleForm()

>>>article=Article.objects.get(pk=1)

>>>form=ArticleForm(instance=article)#赋值instance可以使form表单是可以接受对象的数据

save()方法

每一个ModelForm都有一个save()方法,这个方法可以更具绑定的form表单创建并且保存一个数据库对象,ModelForm的子类可以接受一个model的子类作为instance的参数,如果存在那么save()方法会更新这个实例,否则会创建一个新的实例

save(commit=False)

save()方法接受一个commit的参数,其值为True或者False。默认为True。

如果你声明 save(commit=False),那么它就会返回一个还未保存至数据库的对象,这样的话 你可以用这个对象添加一些额外的数据,然后在用save()保存到数据库

def edit(request,sid):

edit_obj = get_object_or_404(PointRule,id=sid)

if request.method == 'POST':

form = PointRuleForm(request.POST.copy(),instance=edit_obj)

if form.is_valid():

point = form.save(commit=False)

point.update_user = request.user #在form.save(commit=False时,添加一些表单中未有的数据)

point.save()

return redirect('point:index')

else:

messages.error(request, u'数据验证错误')

else:

form = PointRuleForm(instance=edit_obj)

return render(request,'point/edit.html',locals())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

defedit(request,sid):

edit_obj=get_object_or_404(PointRule,id=sid)

ifrequest.method=='POST':

form=PointRuleForm(request.POST.copy(),instance=edit_obj)

ifform.is_valid():

point=form.save(commit=False)

point.update_user=request.user#在form.save(commit=False时,添加一些表单中未有的数据)

point.save()

returnredirect('point:index')

else:

messages.error(request,u'数据验证错误')

else:

form=PointRuleForm(instance=edit_obj)

returnrender(request,'point/edit.html',locals())

save_m2m()方法

在save(commit=False)的时候,如果你的model中含有many-to-many的数据模型,那么你将无法使用save()方法去保存数据,只能使用save_m2m()方法来保存

在为声明ave(commit=False),则不用如此保存,用save()就好了..

Selecting the fields to use

1.选择model中所有字段为表单中的字段

__all__

1

__all__

例子

from django.forms import ModelForm

class AuthorForm(ModelForm)

class Meta:

model = Author

fields='__all__'

1

2

3

4

5

fromdjango.formsimportModelForm

classAuthorForm(ModelForm)

classMeta:

model=Author

fields='__all__'

2.剔除指定字段的所有数据 exclude

class PartialAuhorForm(ModelForm):

class Meta:

model = Author

exclude = ['title'] #添加Author model中出了titile字段的所有字段至PartialAuhorForm表单

1

2

3

4

classPartialAuhorForm(ModelForm):

classMeta:

model=Author

exclude=['title']#添加Author model中出了titile字段的所有字段至PartialAuhorForm表单

覆盖字段的默认值

form django.forms import ModelForm, Textarea

form myapp.models import Author

class AuthorForm(ModelForm):

class Meta:

model=Author

fields=('name','title','birth_date')

widgets={'name':Textarea(attrs={'cols':80,'rows':20})}

1

2

3

4

5

6

7

formdjango.formsimportModelForm,Textarea

formmyapp.modelsimportAuthor

classAuthorForm(ModelForm):

classMeta:

model=Author

fields=('name','title','birth_date')

widgets={'name':Textarea(attrs={'cols':80,'rows':20})}

from django.utils.translation import ugettext_lazy as _

class AuthorForm(ModelForm):

class Meta:

model=Author

fields=('name','title','birth_date')

labels = { 'name':_('Writer'), }

help_texts = {'name':_('some useful help text.'),}

error_messages={ 'name':{'max_length':_("this writer name is too long")} }

1

2

3

4

5

6

7

8

fromdjango.utils.translationimportugettext_lazyas_

classAuthorForm(ModelForm):

classMeta:

model=Author

fields=('name','title','birth_date')

labels={'name':_('Writer'),}

help_texts={'name':_('some useful help text.'),}

error_messages={'name':{'max_length':_("this writer name is too long")}}

文/天天稀饭(简书作者)原文链接:http://www.jianshu.com/p/5664dd79c0ba

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java获取2017年第39周_对输入计算机的数据进行审核,可采用()进行审核。A.抽查B.屏幕审核C.凭证清单和屏幕审核D.凭证清单...

参考答案如下对输的数单和薄基底膜肾病主要的遗传方式为A.常染色体显性遗传B.常染色体隐性遗传C.性染色体显性遗传D.性染色儿童的情感发展遵循若干的阶段,比较后出现的是()。A、入计惊讶B、好奇C、恐惧D、哀和乐算机审核智商和情商完全可以分开。()人格不包括以下哪个方面&…

php解析bt,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

本文实例讲述了PHP基于闭包思想实现的torrent文件解析工具。分享给大家供大家参考&#xff0c;具体如下&#xff1a;PHP对静态词法域的支持有点奇怪&#xff0c;内部匿名函数必须在参数列表后面加上use关键字&#xff0c;显式的说明想要使用哪些外层函数的局部变量。function c…

php excel header,【IT专家】PHP生成excel,方法一-header生成

本文由我司收集整编&#xff0c;推荐下载&#xff0c;如有疑问&#xff0c;请与我司联系PHP生成excel&#xff0c;方法一:header生成2018/02/09 444 public function export_order() { //搜索条件$where ‘where 11 ‘; $consignee I(‘consignee’); if($consignee){ $where…

discuz php源码,Discuz7 php源码,该如何解决

PHP code$_value) { $_key{0} ! _ && $$_key daddslashes($_value);}}//过滤$_FILES,也就是添加引用if (!MAGIC_QUOTES_GPC && $_FILES) {$_FILES daddslashes($_FILES);}//初始化一些变量$charset $dbs $dbcharset $forumfounders $metakeywords $extr…

php显示html表单内容,HTML表单是什么?HTML表单内容的详细介绍(附代码)

HTML 表单是用于搜集不同类型的用户输入的&#xff0c;表单是一个包含表单元素的区域&#xff1b;表单元素是允许用户在表单中(比如&#xff1a;文本域、下拉列表、单选框、复选框等等)输入信息的元素&#xff1b;表单使用表单标签()定义。一、介绍1.表单概念&#xff1a;表单最…

matlab分数约分,分母

3.10c语言自学2021-03-10 19:51:18https://s4.51cto.com/images/blog/202103/10/489602174c3d2e1deb2f94bc7944366c.png?x-oss-processimage/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk)term-termxx/(n(…

php中metadata,模型元数据(Models Metadata)

To speed up development Phalcon\Mvc\Model helps you to query fields and constraints from tables related to models. To achieve this, Phalcon\Mvc\Model\MetaData is available to manage and cache table metadata.Phalcon\Mvc\Model 能帮助你查询字段从表关联到模型和…

matlab函数冒号代表的意思,MATLAB中冒号运算符的含义

实际上a&#xff1a;b生成一个向量.您可以仅将其用作索引,因为(…)也接受列表,例如octave-3.0.3:10> a [1,4,7]a 1 4 7octave-3.0.3:11> b [1,4,9,16,25,36,49]b 1 4 9 16 25 36 49octave-3.0.3:12> b(a) # gets [b(1), b(4), b(7)]ans 1 16 49现在,a&#xff1a;b&…

ubuntu安装matlab空间不足,Ubuntu安装Matlab方法及命令

操作系统&#xff1a;Ubuntu 10.04matlab版本&#xff1a;Mathworks.Matlab.R2010a.UNIX注意&#xff1a;软件安装后会占用大量硬盘空间&#xff0c;约4G.软件Mathworks.Matlab.R2010a.UNIX一、软件安装1.右键 Mathworks.Matlab.R2010a.UNIX.iso &#xff0c;解压缩到此处。2.在…

java怎么让1的数据2可以拥有,【如何让代码变“高级”(二)】-这样操作值得一波666(Java Stream)(这么有趣)...

“致"高级"工程师(BUG工程师)一颗折腾的心原创不易&#xff0c;点个赞&#x1f497;&#xff0c;支持支持开发中的代码在开发中的代码是不是很常见这样的代码&#xff1a;这样的?for循环取元素取值List szUserList new ArrayList<>();for (User user : userL…

网易云信短信接口java,调用网易云短信验证码接口Demo

最近在开发新的项目&#xff0c;因为需要使用验证码验证这个功能。我选择的是 网易云 的验证码接口。免费使用20条。并且在正式使用的过程中&#xff0c;对比了很多家以后&#xff0c;感觉还是他家的便宜。因为随着你购买的短信包数量的增加&#xff0c;价钱会相应的降低&#…

php+页面加载进度,基于jQuery实现模拟页面加载进度条_jquery

因为我们无法通过任何方法获取整个页面的大小和当前加载了多少&#xff0c;所以想制作一个加载进度条的唯一办法就是模拟。那要怎么模拟呢&#xff1f;我们知道&#xff0c;页面是从上往下执行的&#xff0c;也就是说我们可以大致估算出在页面的某个位置加载了多少&#xff0c;…

php eurl.axd,Http异常eurl.axd出错信息解决方法

您可能感兴趣的话题&#xff1a;IIS核心提示&#xff1a;在IIS6中同时启用了ASP.NET 2.0 和 ASP.NET 4.0 后&#xff0c;网站程序可能会出现如下错误&#xff1a;“ System.Web.HttpException: Path ‘//eurl.axd/‘ was not found. ”在IIS6中同时启用了ASP.NET 2.0 和 ASP.NE…

php radio js,如何使用JavaScript设置radio选中的示例

在页面数据绑定时&#xff0c;经常会遇到给radio设置选中&#xff0c;以下是我写的js方法&#xff0c;经测试可以使用。欢迎拍砖是否是否$(function(){$("#btn1").click(function(){$("input[namerdo1]").eq(0).attr("checked","checked&qu…

oracle 列 连续,oracle中某列连续相同值的记录数统计(一个简单的例子)

oracle中某列连续相同值的记录数统计(一个简单的例子) row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组&#xff0c;在分组内部根据 COL2排序&#xff0c;而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).与rownum的区别在于&#x…

oracle ora31633,ORA-31633: unable to create master table

ORA-31626: job does not existORA-31633: unable to create master table "NEWCOURSE.JOB_48"ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPV$FT", line 1020ORA-00955: name is already used by an existing object同步…

a表剔除b表 oracle,删除a表中和b表相同的数据

删除a表中和b表相同的数据删除a表中和b表相同的数据软件环境&#xff1a;1、Windows NT4.0ORACLE 8.0.42、ORACLE安装路径为&#xff1a;C:&#xff3c;ORANT问题提出&#xff1a;1、在做数据转储业务的时候&#xff0c;如果发生操作错误&#xff0c;有可能出现主表和副表中都有…

nifi将hive同步到oracle,NiFi使用总结 一 hive到hive的PutHiveStreaming processor和SelectHiveQL...

我说实话&#xff0c;NiFi的坑真的挺多的。。。1、PutHiveStreaming processor的使用该控制器配置需要hive启用事物&#xff1b;且目前只支持orc格式&#xff0c;且建表需要分桶&#xff0c;开启事务等&#xff0c;建表示例如下&#xff1a;create tabletest_trancaction(user_…

rds oracle,Amazon RDS Oracle数据库托管

您可通过两种不同的许可模式运行 Amazon RDS for Oracle&#xff0c;即“附带许可”和“使用自有许可 (BYOL)”。在“附带许可”服务模型中&#xff0c;您无需单独购买 Oracle 许可&#xff1b;Oracle 数据库软件软件由 AWS 提供授权许可。“附带许可”的起价为 0.04 USD/小时&…

oracle监听系统账号,linux 下 Oracle 监控sysdba用户登陆

在unix平台的Oracle数据库产品中&#xff0c;每次当用户以sysdba权限登陆数据库时&#xff0c;系统就自动创建一个名为ora_.aud的文件&#xff0c;该文件默认在$ORACLE_HOME/rdbms/audit目录下。该文件的自动创建根本不需要系统打开审计功能。在这个文件中记录了连接的用户&…