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

posted on 2018-11-27 23:57  bainianminguo  阅读(188)  评论(0编辑  收藏  举报