- 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)
作者:u012798391 发表于2013-12-1 2:43:30 原文链接
阅读:97 评论:0 查看评论