zoukankan      html  css  js  c++  java
  • Django的Modelforms的介绍

       from django.forms import ModelForm
    
        class Test(ModelForm):
            # 把那张表转化成form组件
            class Meta:
    
                # 这个意思即是把Article转化成form组件
                model = models.Article
    
                # 把表中的所有的字段都做转化,这里也可以传递一个list,可以指定显示某些字段
                fields = "__all__"
    
        # modelform组件的使用方法和forms组件的用法一样,但是i如果要保存出数据的时候,可以直接调用save方法保存就可以了,无论是单表,一对多,还是多对多
    
    
                # 如果增加数据
                # form = Test(request.POST)
                # if form.isvalid():
                #     form.save()
                # 这样就可以直接保存
    
    
    
    
                # 如果编辑数据,用下面的方法就可以把当前的对象的值渲染到form表单中,无论是单表,一对多,还是多对多
                # obj = models.Article.objects.all().first()
                # form = Test(instance=obj)
                # 上面是实现渲染数据到form表单
    
    
    
                # form = Test(request.POST,instance=obj)
                # if form.isvalid():
                #     form.save()
    
                # 这个就是实现更新操作,和增加操作唯一的区别就是通过instance传递一个要编辑的对象进去就可以了
    

      

    简单的用了一下model_forms,觉得还是不是很好用

    我是用书、出版社,作者三张表来做这个联系

    首先下面这个函数是用来展示书籍信息

    def test_models(request):
        method = request.method.lower()
        if method == "get":
            body_list = []
            obj  = models.Book.objects.all()
    
            head_list = models.Book._meta.get_fields()
    
            for i in obj:
                temp = []
                temp.append(i.bid)
                temp.append(i.title)
                temp.append(i.publish)
                temp.append(i.auther.all())
                body_list.append(temp)
            return render(request,"modelform_html1.html",locals())
        else:
            pass
    

      

    下面这个类就是modelform的类

    class test(ModelForm):
    class Meta:
    model = models.Book
    fields = "__all__"
    labels = {"title":"书籍的名称","auther":"作者","publish":"出版社"}
    error_messages = {
    "title":{"required":"不允许为空",
    "invalid":"格式错误"
    }
    }
    widgets = {
    "title":wd.TextInput(attrs={"placeholder":"密码"})
    }
    
    field_classes = {
    "title":forms.EmailField
    }
    

      

      

    下面这个函数是用来处理处理添加书籍的操作

    def add(request):
        method = request.method.lower()
        if method == "get":
            model_form_obj = test()
            for i in model_form_obj:
                print(i.label_tag(),"----------------------")
            return render(request,"modelfrom_add.html",locals())
    
        else:
            model_form_obj = test(request.POST)
            if model_form_obj.is_valid():
                model_form_obj.save()
    
                return redirect("/app2/test_models/")
            else:
                print("出错了")
                model_form_obj = test(request.POST)
    
                return render(request, "modelfrom_add.html", locals())
    

      

    下面这个函数是用来处理编辑书籍的

    def edit(request):
        method = request.method.lower()
        book_obj = models.Book.objects.get(bid=int(request.GET.get("id")))
    
        if method == "get":
            model_form_obj = test(instance=book_obj)
            return render(request,"modelfrom_add.html",locals())
        else:
            model_form_obj = test(request.POST,instance=book_obj)
            model_form_obj.save()
            return redirect("/app2/test_models/")
    

      

    参考博客

    http://www.cnblogs.com/wupeiqi/articles/6144178.html  武sir:Form组件

    http://www.cnblogs.com/wupeiqi/articles/6216618.html  武sir:Model

    http://www.cnblogs.com/wupeiqi/articles/6229414.html  武sir:ModelForm

  • 相关阅读:
    Linux入门
    Python接入支付宝进行PC端支付
    DRF之注册器响应器分页器
    Sencha Touch 实战开发培训 视频教程 第二期 第七节
    Sencha Touch 实战开发培训 视频教程 第二期 第六节
    Sencha Touch 实战开发培训 视频教程 第二期 第五节
    sencha touch 百度地图扩展(2014-6-24)(废弃 仅参考)
    Sencha Touch 实战开发培训 视频教程 第二期 第四节
    Sencha Touch 实战开发培训 视频教程 第二期 第三节
    sencha touch 扩展官方NavigationView 灵活添加按钮组,导航栏,自由隐藏返回按钮(2014-5-15)
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/10029874.html
Copyright © 2011-2022 走看看