zoukankan      html  css  js  c++  java
  • 10.12Django form表单

    2018-10-12 15:24:23

    From表单参考连接: https://www.cnblogs.com/yuanchenqi/articles/7614921.html

    新增了ModelForm的使用,比Form 更省事更简洁!

    越努力越幸运!还有30多天完成把luffycity项目完后面还有其他的flask.爬虫什么的,然后就学完啦!

    明天周末,把博客再整理一下!!!!!

    把自己的博客项目再优化一下!!!233333333!

    越努力,越幸运!永远不要高估自己!

    views.py

    from django.shortcuts import render,redirect
    from .models import *
    from django import forms
    from django.forms import widgets as wid
    from django.forms import ModelForm
    
    
    # 让Model转换成form   Meta是配置类
    class BookForm(ModelForm):
        class Meta:
            model = Book
            fields = "__all__"
            labels = {
                "title": "书籍名称",
                "price": "价格"
            }
            # 在特定框里面加入 标签
            widgets = {
                    "title": wid.TextInput(attrs={"class": "form-control"})
                    "price": wid.TextInput(attrs={"class": "form-control"})
                    "authors": wid.TextInput(attrs={"class": "form-control"})
                }
            # 配置错误信息
            # error_messages{
            #     "": ""
            # }
    
    
    # 这些等同于  下面原生的 BookForm(forms.Form) 类
    
    
    """原生的BookForm"""
    # class BookForm(forms.Form):
    #     title = forms.CharField(max_length=32,label="书籍名称")
    #     price = forms.DecimalField(max_digits=8, decimal_places=2,label="价格")  # 999999.99
    #      渲染的特定标签时候,加特定东西
    #     date = forms.DateField(label="日期",
    #         widget=widgets.TextInput(attrs={"type":"date"})
    #     )
    #     # 与数据库没关系用这个
    #     #gender=forms.ChoiceField(choices=((1,"男"),(2,"女"),(3,"其他")))
    #     # 与数据库有关系用下面俩
    #     #publish=forms.ChoiceField(choices=Publish.objects.all().values_list("pk","title"))
    #     # 单选下拉框
    #     publish=forms.ModelChoiceField(queryset=Publish.objects.all())
    #     authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())
    
    
    def books(request):
        book_list=Book.objects.all()
        return render(request,"books.html",locals())
    
    
    """用原生form表单做的 """
    # def addbook(request):
    #     if request.method=="POST":
    #         form = BookForm(request.POST)
    #         if form.is_valid():
    #             print("cleaned_data",form.cleaned_data)
    #             title=form.cleaned_data.get("title")
    #             price=form.cleaned_data.get("price")
    #             date=form.cleaned_data.get("date")
    #             publish=form.cleaned_data.get("publish")
    #             authors=form.cleaned_data.get("authors") # [1,2]
    #             book_obj=Book.objects.create(title=title,price=price,date=date,publish=publish)
    #             book_obj.authors.add(*authors)
    #             return redirect("/books/")
    #     form=BookForm()
    #     publish_list=Publish.objects.all()
    #     author_list=Author.objects.all()
    #     return render(request,"add.html",locals())
    
    
    """用ModelForm做的add"""
    def addbook(request):
        if request.method=="POST":
            form = BookForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect("/books/")
    
    
    """原生的form"""
    # def editbook(request,edit_book_id):
    #     if request.method=="POST":
    #         title=request.POST.get("title")
    #         price=request.POST.get("price")
    #         date=request.POST.get("date")
    #         publish_id=request.POST.get("publish_id")
    #         author_pk_list=request.POST.getlist("author_pk_list") # [1,2]
    #
    #         Book.objects.filter(pk=edit_book_id).update(title=title,price=price,date=date,publish_id=publish_id)
    #         book_obj=Book.objects.filter(pk=edit_book_id).first()
    #         book_obj.authors.set(author_pk_list)
    #         return redirect("/books/")
    #     edit_book=Book.objects.filter(pk=edit_book_id).first()
    #     form=BookForm()
    #     return render(request,"edit.html",locals())
    
    
    """用ModelForm做的edit_books"""
    def editbook(request,edit_book_id):
        edit_book = Book.objects.filter(pk=edit_book_id).first()
        if request.method == "POST":
            # 传入个isinstance 对象,让他知道对谁 update
            form = BookForm(request.POST, isinstance=edit_book)
            if form.is_valid():
                form.save()
                return redirect("/books/")
        form = BookForm(isinstance=edit_book)
        return render(request, "edit.html", locals())

    add.html和edit_book.html一样

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
    
    <h3>添加页面</h3>
    
    <form action="" method="post" novalidate>
         {% csrf_token %}
    
         {% for field in form %}
            <div>
             {{ field.label }}
             {{ field }}
            </div>
         {% endfor %}
    
        <input type="submit">
    </form>
    </body>
    </html>

     笔记

    原生form
    
    
    forms组件
    
        ChoiceField(Field)
      
        ModelChoiceField(ChoiceField)
       
        ModelMultipleChoiceField(ModelChoiceField)
       
    
    
        1 针对form表单设计form组件
           
    
    modelform
    
         class Book(models.Model):
    
            title=models.CharField(max_length=32)
            price=models.DecimalField(max_digits=8,decimal_places=2)  # 999999.99
            date=models.DateField()
            publish=models.ForeignKey("Publish")
            authors=models.ManyToManyField("Author")
    
    
        class BookForm(forms.Form):
            title = forms.CharField(max_length=32,label="书籍名称")
            price = forms.DecimalField(max_digits=8, decimal_places=2,label="价格")  # 999999.99
            date = forms.DateField(label="日期",
                widget=widgets.TextInput(attrs={"type":"date"})
            )
    
            #gender=forms.ChoiceField(choices=((1,"男"),(2,"女"),(3,"其他")))
            #publish=forms.ChoiceField(choices=Publish.objects.all().values_list("pk","title"))
            publish=forms.ModelChoiceField(queryset=Publish.objects.all())
            authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())
  • 相关阅读:
    [hdu4585]离线,并查集
    [hdu4498]离散化,simpson求积分
    nginx防止跳转到内网解决
    docker 导入导出
    java rsa 解密报:javax.crypto.BadPaddingException: Decryption error
    algid parse error, not a sequence错误
    AttributeError: module 'Crypto.PublicKey.RSA' has no attribute 'import_key'
    No module named 'winrandom'。
    centos同步时间
    bean 属性排列顺序
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9780374.html
Copyright © 2011-2022 走看看