Django:ModelForm的使用 |字号 订阅一、定义ModelFormmodels.pyclass 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_nameforms.pyclass 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 formsA 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)