Django ModelForm的使用
-
Django:ModelForm的使用
-
|字号
-
订阅
- 一、定义ModelForm
- models.py
-
class Group(models.Model):
- name=models.CharField(max_length=30)
- intro=models.TextField(max_length=150)
- tags=models.CharField(max_length=100,null=True)
- time=models.DateField()
- userid=models.ForeignKey(User,unique=False)
- url=models.URLField(null=True)
- def __unicode__(self):
- return self.g_name
- forms.py
- class CreateGroupForm(ModelForm):
- tags = forms.CharField(required=False)
- class Meta:
-
model = Group
- fields=('name','intro','tags')
- widgets={
- 'intro':Textarea(attrs={'width':'400px','heigth':'150px'}),
- }
-
二、form在模板的使用
-
<form method="post" action="">{% csrf_token %}
-
{{form.non_field_errors}}
-
<div><label for="name">小组名称:</label>{{form.name }}{{form.name.errors}}*</div>
-
<div style=" margin-top:10px"><label for="intro">小组介绍:</label>{{form.intro}}{{form.intro.errors}}*</div>
-
<div style=" margin-top:10px"><label for="tags">主题标签:</label>{{form.tags}}<font size="-1">(多个标签用空格分开)</font></div>
- <div style=" margin-top:10px"><input type="submit" value="提交" name="submit" /></div>
-
</form>
- 三、获取提交的数据
- def create_group(request):
-
from sns.group.form import CreateGroupForm
- if request.method == 'POST':
-
form = CreateGroupForm(request.POST)
-
if form.is_valid():
- from datetime import datetime
- current_time=datetime.now()
-
temp=form.save(commit=False) #commit暂时获取一个数据库对象,对其他字段进行赋值
- temp.time=current_time
- temp.userid=User(id=request.session['uid'])
- temp.save() #真正插入数据库
- return HttpResponseRedirect('../')
- else:
-
form = CreateGroupForm()
-
return render_to_response('create_group.html',{'form':form},context_instance=RequestContext(request))
-
注意此处使用temp暂时存放一个实例对象:好处是可以先生成一个映像,对其他不在form里面的字段处理再真正插入数据库,如果不需要temp=form.save(commit=False),直接form.save即可。
-
temp=form.save(commit=False) #commit暂时获取一个数据库对象,对其他字段进行赋值
- temp.time=current_time
- temp.userid=User(id=request.session['uid'])
- temp.save() #真正插入数据库
- 四、另外可能存在is_valid检测不出来的原因:
-
可能1:使用未绑定的对象,即form = CreateGroupForm(request.POST)中不存在数据
- Bound and unbound forms
-
A Form instance is either bound to a set of data, or unbound.
-
If it’s bound to a set of data, it’s capable of validating that data and rendering the form as HTML with the data displayed in the HTML.
-
If it’s unbound, it cannot do validation (because there’s no data to validate!), but it can still render the blank form as HTML.
- 可能2:缺少:
-
return render_to_response('create_group.html',{'form':form},context_instance=RequestContext(request))作为函数的返回值。
-
五、使用instance参数初始化form空间的内容values
- groupinfo=Group.objects.get(id=group_id)
-
form = CreateGroupForm(instance=groupinfo)