数据库方法django中ModelForm学习系列一~save方法数据库方法

在写这篇文章之前,xxx已经写过了几篇关于改数据库方法主题的文章,想要了解的朋友可以去翻一下之前的文章

    我们直接通过例子来讲授:

    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

文章结束给大家分享下程序员的一些笑话语录: 神灯新篇
一个程序员在海滩上发现了一盏神灯。他在灯上擦了几下,一个妖怪就从灯里跳出来说:“我是世界上法术最强的妖怪。我可以实现你的任何梦想,但现在,我只能满足你一个愿望。”程序员摊开了一幅中东地图说:“我想让中东得到永久的和平。”妖怪答道:“哦,我没办法。自打创世纪以来,那里的战火就没有停息过。这世上几乎没有我办不到的事,但这件事除外。”程序员于是说:“好吧,我是一个程序员,为许多用户编写过程序。你能让他们把需求表述得更清楚些,并且让我们的软件项目有那么一两次按进度按成本完成吗?”妖怪说:“唔,我们还是来看中东地图吧。”

posted @ 2013-04-21 01:03  坚固66  阅读(250)  评论(0编辑  收藏  举报