zoukankan      html  css  js  c++  java
  • 数据库方法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的年代,胶片照片年代做假的也不少,那时候都相信假的!)

  • 相关阅读:
    【图像分割】:使用全卷积神经网络FCN,进行图像语义分割详解(附代码实现)
    阿里天池文本分类竞赛task2:初始数据分析
    阿里天池文本分类竞赛task1: 赛题理解
    threejs在建筑学上的应用:《Learning Threejs》
    threejs官网教程geometry有哪些?可以自定义自己的geometry吗?
    cesium如何让模型贴地?
    cesium添加OSM建筑物
    threejs与tubegeometry
    cesium建模&加载3dsmax模型
    cesium与三维管线
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3033749.html
Copyright © 2011-2022 走看看