Django的ModelForm
生活随笔
收集整理的這篇文章主要介紹了
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.Book2.#校驗的字段#fields=["title","price","pub_date"]fields="__all__"3.自定義錯誤提示:error_messages = {'name':{'required':"用戶名不能為空",},'age':{'required':"年齡不能為空",},}4.#widgets用法,比如把輸入用戶名的input框給為Textareafrom 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 ModelFormdef books(request):book_list=models.Book.objects.all()return render(request,"book_list.html",{"book_list":book_list})from django.forms import widgets as widclass 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?
?
?轉載于:https://www.cnblogs.com/zgf-666/p/9161666.html
總結
以上是生活随笔為你收集整理的Django的ModelForm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国服LOL大神的英雄熟练度都超过3W,不
- 下一篇: 2021安妮爆发出装 lol安妮出装顺序