数据库方法django中ModelForm学习系列一~save方法
最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--数据库方法
我们直接通过例子来讲授:
modes.py 码代如下:
from django.db import models
from django.forms import ModelForm
TITLE_CHOICES = (
('MR', 'Mr.'),
('MRS', 'Mrs.'),
('MS', 'Ms.'),
)
class Author(models.Model):
name = models.CharField(max_length=100)
title = models.CharField(max_length=3, choices=TITLE_CHOICES)
birth_date = models.DateField(blank=True, null=True)
def __unicode__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
forms.py 码代如下:
class AuthorForm(ModelForm):
class Meta:
model = Author
class BookForm(ModelForm):
class Meta:
model = Book
上面说说save方法
见到的save方法非无有以下几种情势:
<1>通过页面post过去的据数 form收接 直接保存到据数库,同时可以生产对应的modes的一个新对象,为什么要生产,面后讲....这个重要用来保存信息
f = ArticleForm(request.POST) new_article = f.save()
<2>从据数库中出取modes的对象,然后通过form参数instance方法可以实例化该form,这个重要用来查看详细的信息
a = Article.objects.get(pk=1) f = ArticleForm(instance=a) f.save()
<3>既有post又有instance,则以post为主,这个重要用来改修详细的信息
a = Article.objects.get(pk=1) f = ArticleForm(request.POST, instance=a) f.save()
<4>特别注意的是,save方法有个参数叫commit,默许是true,即当应用f.save()的时候,会将据数保存到据数库,但是示显指出commit=false,则不会保存到据数库,这是面上new出来的新对象就会起作用了,这样可就以对据数行进其他的改修了,这个会在面后讲的,,差不多就这几种方法
上面把完全的例案贴出来:---重要针对是保存,其它大家可以自己试试哈。
models和forms端见面上拉
urls.py:
urlpatterns=patterns('',
url(r'^test/modelform/$',testModelForm,name='testModelForm'),
)
views.py
def testModelForm(request):
# a=Author.objects.get(pk=1)
# form=AuthorForm(instance=a)
form=AuthorForm()
if request.method=='POST':
form=AuthorForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('welcome'))
return render_to_response('testModelForm.html',locals(),RequestContext(request))
html端:
{% extends 'base.html' %}
{% block title %}测试ModelForm{% endblock %}
{% block content %}
<form method="post" action=".">{% csrf_token %}
<table>
<tr><td><lable for='id_name'>作者名:</lable></td><td>{{ form.name }}</td><td>{{ form.name.errors }}</td></tr>
<tr><td><lable for='id_title'>标题:</lable></td><td>{{ form.title }}</td><td>{{ form.title.errors }}</td></tr>
<tr><td><lable for='id_birth_date'>出生日期:</lable></td><td>{{ form.birth_date }}</td><td>{{ form.birth_date.errors }}</td></tr>
<tr><td><input type="submit" value="注册" /></td><td><input type="reset" value="重置"/></td><td></td></tr>
</table>
</form>
{% endblock %}
后续见下节。。。。
class AuthorForm(ModelForm):
class Meta:
model = Author
class BookForm(ModelForm):
class Meta:
model = Book
文章结束给大家分享下程序员的一些笑话语录: 自从有了Photoshop,我再也不相信照片了!(没有Photoshop的年代,胶片照片年代做假的也不少,那时候都相信假的!)

浙公网安备 33010602011771号