参考链接:https://docs.djangoproject.com/en/1.4/topics/forms/
Form的用法
1.定义
方法一:入门定义
fromdjango import forms
classContactForm(forms.Form):
subject= forms.CharField(max_length=100)
message= forms.CharField()
sender= forms.EmailField()
cc_myself= forms.BooleanField(required=False)
manager= forms.RegexField(regex=r'(\s*[a-zA-Z0-9_-]+\s*;)*')
1.form一般存放在二级app目录中
2.比较通用的属性是required=False,blank=True,null=True,
方法二:和class绑定的form格式
classItemSimple(forms.ModelForm):
classMeta:
model= Item
fields= ('name','conten', 'start_time', 'end_time',"status")
2.form常用方法
f= XXXFrom() #初始化一个空form
f= ContactForm({'subject': 'Hello', 'message': ''}) #初始化一个有值form
实例化一个与对象绑定的form
a= Article.objects.get(pk=1)
f= ArticleForm(instance=a)
f#输出整个form
f['subject']#输出单个input元素
f.is_bound #是否有值,对任意一个字段赋值,这个判断就为true
f.is_valid() #是否是验证表单
f['message'].errors #查看单个input的错误
f.errors#查看整个form的错误
如果表单验证通过,则有clean_data属性
f.cleaned_data #得到的结果是:{message': uNice site!, email: uadrian@example.com, subject:uHello}
self.cleaned_data['message']#得到单个字段的值
3.通常form在view中的处理
defcontact(request):
ifrequest.method == 'POST':
form= ContactForm(request.POST)
ifform.is_valid():
#这里是获取form中通过验证的数据,在获取以后通常的操作是插入到数据库中
subject= form.cleaned_data['subject']
message= form.cleaned_data['message']
sender= form.cleaned_data['sender']
cc_myself= form.cleaned_data['cc_myself']
returnHttpResponseRedirect('/thanks/')
else:
form= ContactForm()
returnrender(request, 'contact.html', {
'form':form,
})
可用的form字段
AutoField Not represented in the form
BigIntegerField IntegerField with min_value set to-9223372036854775808 and max_value set to 9223372036854775807.
BooleanField BooleanField
CharField CharField with max_length set tothe model field’s max_length
CommaSeparatedIntegerField CharField
DateField DateField
DateTimeField DateTimeField
DecimalField DecimalField
EmailField EmailField
FileField FileField
FilePathField CharField
FloatField FloatField
ForeignKey ModelChoiceField (see below)
ImageField ImageField
IntegerField IntegerField
IPAddressField IPAddressField
GenericIPAddressField GenericIPAddressField
ManyToManyField ModelMultipleChoiceField (see below)
NullBooleanField CharField
PositiveIntegerField IntegerField
PositiveSmallIntegerField IntegerField
SlugField SlugField
SmallIntegerField IntegerField
TextField CharField withwidget=forms.Textarea
TimeField TimeField
URLField URLField
RTX多人名称的获取
#先在form.py中定义一个拆分人名的函数
def _rtxnames_2_member(text):
re_split = re.compile(r'\s*;\s*')
members = []
for username in re_split.split(text):
if username == "":
continue
try:
member = Member.objects.get(name=username)
except Member.DoesNotExist:
member = Member(name=username)
member.save()
members.append(member)
return members
#在相关的form中定义一段解析"a;b;c;d;e"这样的方法
manager =forms.RegexField(regex=r'(\s*[a-zA-Z0-9_-]+\s*;)*')
def clean_member(self):
member_text = self.cleaned_data['member']
return _rtxnames_2_member(member_text)
本文介绍 Django 中 Form 的定义与使用方法,包括初始化、验证及数据提取等关键步骤,并提供了多种字段类型的对应形式。
4万+

被折叠的 条评论
为什么被折叠?



