Django的ModelForm简单用法
来源:互联网 发布:剑网3谢云流捏脸数据 编辑:程序博客网 时间:2024/04/30 08:41
Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分别定义Form类和Model类会比较麻烦,最简单的方式就是通过Model来生成一个Form类,Django内置的ModelForm就是为此而生的.下面以一个简单的例子来说明它的简单用法.
基本需求
收集用户的日本报名信息
其中JLPT的日语等级分为N1,N2,N3,N4,N5;所以需要一个选择器.
用户需要手动输入姓名,因此需要一个输入框.
在Project中新建一个app
$ python manager startapp jlpt
文件目录结构如下所示
jlpt1/├── admin.py├── __init__.py├── models.py├── tests.py└── views.py0 directories, 5 files
添加URL规则
url(r'^jlpt/', include('jlpt.urls')),
在jlpt目录下新建一个urls.py文件
from django.conf.urls import patterns, include, urlurlpatterns = patterns('', url(r'^$', 'jlpt.views.home', name='home'),)
如此一来,当用户在浏览器中输入
http://yourdomain.com/jlpt
时,会导向到名叫home的view.下面我们来定义home这个view.定义view
from django.shortcuts import renderfrom django.http import HttpResponsefrom jlpt.forms import ExamInfoForm# Create your views here.def home(request): if request.method == 'POST': form = ExamInfoForm(request.POST) if form.is_valid(): exam_info = form.save() exam_info.save() return HttpResponse('Thank you') else: form = ExamInfoForm() return render(request, 'jlpt/index.html', {'form_info': form})
当用户post表单时,利用POST数据新建一个ExamInfoForm,把Form中的内容保存成一个instance,然后将instance保存到数据库中.
当用户get表单时,新建一个空的ExamInfoForm.
ExamInfoForm这个类就是我们接下来要创建的
ModelForm
创建ModelForm类
在jlpt目录下新建一个forms.py文件
from django.forms import ModelFormfrom jlpt.models import ExamInfoclass ExamInfoForm(ModelForm): class Meta: model = ExamInfo fields = '__all__'
ExamInfoForm继承自ModelForm,新建了一个Meta类,model的值为ExamInfo,这个ExamInfo就是一个Model类.
定义Model类
from django.db import models# Create your models here.LEVEL_CHOICES = ( ('N1', 'N1'), ('N2', 'N2'), ('N3', 'N3'), ('N4', 'N4'), ('N5', 'N5'), ('NO', 'NO'),)class ExamInfo(models.Model): name = models.CharField(max_length=10) level = models.CharField(max_length=2, choices=LEVEL_CHOICES)
这样只需要定义一个Model类,就可以依此创建一个新的Form,当然Form是可以定制的,比如选择需要显示的字段.
添加template文件
<!DOCTYPE html></html> <head><title>报名情况统计</title></head><body><p style="text-align:center;font-size:1.5em;">少年よ、大志を抱け!</p><form action="/jlpt/" method="post"> {% csrf_token %}<fieldset><legend>你要参加2014年7月JLPT的哪个等级考试?</legend> {{ form_info.as_p }} <input type="submit" value="submit" /> </fieldset></form></body></html>
views.home中的
return render(request, 'jlpt/index.html', {'form_info': form})
通过传递form
(这个html文件中为form_info
)来渲染这个页面.添加后台管理
在jlpt目录下新建一个admin.py文件,代码如下
from django.contrib import adminfrom jlpt.models import ExamInfo# Register your models here.class ExamInfoAdmin(admin.ModelAdmin): list_display = ['name', 'level']admin.site.register(ExamInfo, ExamInfoAdmin)
通过http://www.yourdomain.com/admin登陆到后台管理系统时,可以看到数据分为
name
和level
两列.安装jlpt.
在project的settings.py文件中,为INSTALLED_APPS添加一个新的item.
# Application definitionINSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'your project name', 'jlpt',)
完成,访问一下
1 0
- Django的ModelForm简单用法
- Django ModelForm的使用
- Django中modelform的使用
- 关于django中ModelForm的instance
- 五. Django的forms与ModelForm
- Django ModelForm修改默认的控件属性
- django forms.modelform
- django modeladmin override ModelForm
- Django之ModelForm组件
- Django中的Form & ModelForm
- django中ModelForm多表单组合的解决方案
- django表单使用forms.ModelForm
- django admin ModelForm field 验证
- 使用Django的ModelForm对表单进行自动验证(可自定义验证规则)
- Django Meta小节(二) 之ModelForm
- Django细谈之:Model和ModelForm关联
- Django(九)上:ModelForm操作
- django ModelForm修改显示缩略图 imagefield类型
- 动态规划之最长递增子序列问题详解
- UI常用布局<二>------相对布局(RelativeLayout)
- 从IClassFactory为{...}的COM组件创建实例失败
- uva 1484 - Alice and Bob's Trip(树形dp)
- java特点、环境搭建、及hello word学习
- Django的ModelForm简单用法
- 重装grub
- NSNotificationCenter 的几篇值得收藏的网文
- 如何写出高质量的javascript代码2
- iPhone之Quartz 2D系列--颜色和颜色空间(4)Color and Color Spaces
- java 裁剪图片 可以输入坐标 x y with hight
- iPhone之Quartz 2D系列--变换(5)Transforms
- python 学习方法
- iPhone之Quartz 2D系列--阴影和透明层(6)Shadows&Transparency Layers