Django ModelForm的使用

  1. Django:ModelForm的使用  
  2. |字号
  3.  订阅
  4. 一、定义ModelForm
  5. models.py
  6. class Group(models.Model):
  7.     name=models.CharField(max_length=30)
  8.     intro=models.TextField(max_length=150)
  9.     tags=models.CharField(max_length=100,null=True)
  10.     time=models.DateField()
  11.     userid=models.ForeignKey(User,unique=False)
  12.     url=models.URLField(null=True)

  13.     def __unicode__(self):
  14.         return self.g_name
  15. forms.py
  16. class CreateGroupForm(ModelForm):
  17.     tags = forms.CharField(required=False)
  18.     class Meta:
  19.         model = Group
  20.         fields=('name','intro','tags')
  21.         widgets={
  22.             'intro':Textarea(attrs={'width':'400px','heigth':'150px'}),
  23.             }
  24. 二、form在模板的使用
  25. <form method="post" action="">{% csrf_token %}
  26.    {{form.non_field_errors}}
  27.    <div><label for="name">小组名称:</label>{{form.name }}{{form.name.errors}}*</div>
  28.    <div style=" margin-top:10px"><label for="intro">小组介绍:</label>{{form.intro}}{{form.intro.errors}}*</div>
  29.    <div style=" margin-top:10px"><label for="tags">主题标签:</label>{{form.tags}}<font size="-1">(多个标签用空格分开)</font></div>
  30.    <div style=" margin-top:10px"><input type="submit" value="提交" name="submit" /></div>
  31. </form>
  32. 三、获取提交的数据
  33. def create_group(request):
  34.     from sns.group.form import CreateGroupForm
  35.     if request.method == 'POST':      
  36.         form = CreateGroupForm(request.POST)
  37.         if form.is_valid():
  38.             from datetime import datetime           
  39.             current_time=datetime.now()
  40.             temp=form.save(commit=False) #commit暂时获取一个数据库对象,对其他字段进行赋值
  41.             temp.time=current_time
  42.             temp.userid=User(id=request.session['uid'])
  43.             temp.save() #真正插入数据库
  44.             return HttpResponseRedirect('../')
  45.     else:        
  46.         form = CreateGroupForm()
  47.     return render_to_response('create_group.html',{'form':form},context_instance=RequestContext(request))

  48. 注意此处使用temp暂时存放一个实例对象:好处是可以先生成一个映像,对其他不在form里面的字段处理再真正插入数据库,如果不需要temp=form.save(commit=False),直接form.save即可。
  49. temp=form.save(commit=False) #commit暂时获取一个数据库对象,对其他字段进行赋值
  50.             temp.time=current_time
  51.             temp.userid=User(id=request.session['uid'])
  52.             temp.save() #真正插入数据库
  53. 四、另外可能存在is_valid检测不出来的原因:
  54. 可能1:使用未绑定的对象,即form = CreateGroupForm(request.POST)不存在数据
  55. Bound and unbound forms
  56. Form instance is either bound to a set of data, or unbound.

  57. 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.

  58. 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.

  59. 可能2:缺少:
  60. return render_to_response('create_group.html',{'form':form},context_instance=RequestContext(request))作为函数的返回值。

  61. 五、使用instance参数初始化form空间的内容values
  62.         groupinfo=Group.objects.get(id=group_id)
  63.         form = CreateGroupForm(instance=groupinfo)

   
   
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值