MX教程之ModelForm表单提交

在Form的基础上,Django还提供了一种ModelForm,当form表单的数据很接近数据model时,就可以使用ModelForm来节省许多代码量

  • 和Form一样,首先在相应app下新建forms.py文件
  • 然后编辑此文件(以用户咨询表单为例):
from django import forms

from operation.models import UserAsk


# modelForm可以像model一样save到数据库中
class UserAskForm(forms.ModelForm):
    # 这里可以加上一些自定义新增字段
    # my_field = forms.CharField(max_length=50)

    class Meta:
        # 指明哪一个model
        model = UserAsk
        # 指明需要用原model的哪些字段
        fields = ['name', 'mobile', 'course_name']
  • 根据app分发url

项目总路由:

Screenshot from 2018-03-20 22-34-34.png

app分路由:

MX教程之ModelForm表单提交_第1张图片
Screenshot from 2018-03-20 22-36-28.png

这样的话,模板中使用url路由时,就需要写成{% url '命名空间namespace:分路由name' %},就像下面:

Screenshot from 2018-03-20 22-44-19.png
  • 给ModelForm提交新增一个url路由用来提交表单(因为这是一个异步的Ajax提交,会向前端返回一个json字符串;虽然也可以写成同步渲染,但是每次提交会刷新页面,用户体验会很不好!):
MX教程之ModelForm表单提交_第2张图片
Screenshot from 2018-03-21 21-04-28.png
  • 通过Django的http模块中的HttpResponse指明返回的类型(首先要导入:from django.http import HttpResponse):
MX教程之ModelForm表单提交_第3张图片
Screenshot from 2018-03-22 13-41-28.png

还可以用JsonResponse(推荐):

MX教程之ModelForm表单提交_第4张图片
Screenshot from 2018-03-22 13-46-35.png

如果返回值不是键值对类型,需要加个参数safe=False,官方文档:

MX教程之ModelForm表单提交_第5张图片
Screenshot from 2018-03-22 13-48-46.png
  • 前端Ajax部分:
MX教程之ModelForm表单提交_第6张图片
Screenshot from 2018-03-21 22-58-32.png
  • 对手机号码做进一步自定义验证(利用正则):
MX教程之ModelForm表单提交_第7张图片
Screenshot from 2018-03-21 23-01-50.png

这样,一个简单的关于ModelForm的表单提交就完成了!

你可能感兴趣的:(MX教程之ModelForm表单提交)