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)

    
    
    
    

你可能感兴趣的:(django,python,python,学习笔记)