zoukankan      html  css  js  c++  java
  • Django的ModelForm

    这个组件的功能就是把model和form组合起来

    1.创建ModelForm

    
    

    1.model.py中创建模型表

    class Book(models.Model):
        title=models.CharField(max_length=32)
        price=models.DecimalField(max_digits=8,decimal_places=2)
        pub_date=models.DateField()
        publish=models.ForeignKey("Publish")
        authors=models.ManyToManyField("Author")
    
        def __str__(self):
            return self.title

    2.首先导入ModelForm

    from django.forms import ModelForm在视图函数中,定义一个类,比如就叫SBookModelForm,这个类要继承ModelForm,在这个类中再写一个原类Meta(规定写法,并注意首字母是大写的)
    class BookModelForm(ModelForm):
        class Meta:
            1.#对应的Model中的类,对哪张表设置,就写哪张表
            model=models.Book
            2.#校验的字段
            #fields=["title","price","pub_date"]
            fields="__all__"
            3.自定义错误提示:
             error_messages = {
            'name':{'required':"用户名不能为空",},
            'age':{'required':"年龄不能为空",},
            }
            4.#widgets用法,比如把输入用户名的input框给为Textarea
            from django.forms import widgets as wid #因为重名,所以起个别名
              widgets={
                "pub_date":wid.TextInput(attrs={"type":"date"})
            }
            5.labels,自定义在前端显示的名字
             labels= {
                    "name":"用户名",
                    "price":"价格"
            }
            def clean_title(self):
                 return self.cleaned_data.get("title")

    2.基于ModelForm添加数据

    def addbook(request):
        if request.method=="POST":
    
            form=BookModelForm(request.POST)
            if form.is_valid():
    
                form.save() # create方法  :BookModelForm.Meta.model.objects.create(**form.cleaned_data)   
    
                return redirect("/books/")
            else:
                return render(request, "addbook.html", locals())
    
        form=BookModelForm()
        return render(request,"addbook.html",locals())
    addbook.html:      
      <form action="" method="post" novalidate>
        {% csrf_token %}
    
        {% for field in form %}
        <p>
            <label for="">{{ field.label }}</label>
            {{ field }} <span>{{ field.errors.0 }}</span>
        </p>
        {% endfor %}
        <input type="submit">
    </form>

    3.基于ModelForm编辑数据 (instance)

    def changebook(request,id):
        edit_book = models.Book.objects.get(pk=id)
        if request.method=="POST":  
            form = BookModelForm(request.POST,instance=edit_book)
            if form.is_valid():
                form.save()  # update方法:  edit_book.update(form.cleaned_data)
                return redirect("/books/")
            else:
                return render(request, "addbook.html", locals())
        form=BookModelForm(instance=edit_book)
        return render(request,"changebook.html",locals())
    changebook.html:

    HTML

    changebook.html:
    <form action="" method="post">
        {% csrf_token %}
    
        {{ form.as_p }}
    
        <input type="submit">
    </form>

    基于ModelForm的图书管理系统

    from django.forms import ModelForm
    
    def books(request):
        book_list=models.Book.objects.all()
        return render(request,"book_list.html",{"book_list":book_list})
    
    from django.forms import widgets as wid
    
    class BookModelForm(ModelForm):
        class Meta:
            model=models.Book
            #fields=["title","price","pub_date"]
            fields="__all__"
            labels={"title":"书籍名称","price":"价格"}
            error_messages={
                "title":{'required':"书籍名称不能为空",}
            },
            widgets={
                "pub_date":wid.TextInput(attrs={"type":"date"})
            }
        def clean_title(self):
            return self.cleaned_data.get("title")
    
    def addbook(request):
        if request.method=="POST":
            form=BookModelForm(request.POST)
            if form.is_valid():
    
                form.save() # create方法
    
                return redirect("/books/")
            else:
               return render(request, "addbook.html", locals())
        form=BookModelForm()
        return render(request,"addbook.html",locals())
    
    def changebook(request,id):
        if request.method=="POST":
            edit_book = models.Book.objects.get(pk=id)
            form = BookModelForm(request.POST,instance=edit_book)
            if form.is_valid():
                form.save()  # update方法  edit_book.update(request.POST)
                return redirect("/books/")
            else:
                return render(request, "addbook.html", locals())
        edit_book=models.Book.objects.get(pk=id)
        form=BookModelForm(instance=edit_book)
        return render(request,"changebook.html",locals())
    
    def deletebook(request,id):
        models.Book.objects.get(pk=id).delete()
        return redirect("/books/")
    Views.py
    '''
    book_list
    <ul>
        {% for book in book_list %}
        <li>{{ book.title }}---{{ book.price }}-----{{ book.publish.name }}
            <a href="/books/{{ book.pk }}/change/">编辑</a>
            <a href="/books/{{ book.pk }}/delete/">删除</a>
        </li>
        {% endfor %}
    </ul>
    changebook
    <form action="" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit">
    </form>
    addbook
    <form action="" method="post" novalidate>
        {% csrf_token %}
    
        {% for field in form %}
        <p>
            <label for="">{{ field.label }}</label>
            {{ field }} <span>{{ field.errors.0 }}</span>
        </p>
        {% endfor %}
        <input type="submit">
    </form>
    '''
    HTML
     
  • 相关阅读:
    C++ 虚函数
    一个 CTF Crypto 题解
    关于 CTF 图片相关题目的一些套路
    无迹卡尔曼滤波(Unscented Kalman Filter)
    python机器学习之决策树
    Python:针对出现的ModuleNotFoundError: No module named '×××'
    模糊综合评价
    层次分析法
    matlab练习3
    matlab常用命令
  • 原文地址:https://www.cnblogs.com/zgf-666/p/9161666.html
Copyright © 2011-2022 走看看