关于form组件的补充-------formChoice
生活随笔
收集整理的這篇文章主要介紹了
关于form组件的补充-------formChoice
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
form組件的Choice字段
還是基于出版社和書的模型來詳解
models.py(模型)
from django.db import models# Create your models here. class Book(models.Model):title = models.CharField(max_length=32)pub_date = models.DateField()price = models.DecimalField(max_digits=5, decimal_places=2) state=models.IntegerField(choices=((1,'已出版'),(2,'未出版')),default=1) #在數據庫存儲是以數字存儲的,怎么取值?book是類的對象--book.get_state_displaypublish = models.ForeignKey(to="Publish", to_field="id", on_delete=models.CASCADE, null=True)authors = models.ManyToManyField("Author", db_table="book2authors") # 創建關系表def __str__(self):return self.titleclass Publish(models.Model):name = models.CharField(max_length=32)city = models.CharField(max_length=32)email = models.CharField(max_length=32)def __str__(self):return self.nameclass Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField() gender=models.IntegerField(choices=((1,'男'),(2,'女'),),default=1)#在數據庫存儲是以數字存儲的,怎么取值?book是類的對象--book.get_gender_display ?urls.py(路徑分發)
urlpatterns = [path('admin/', admin.site.urls),path('books/', views.books, name='books'),path('addbooks/', views.addbooks, name='addbooks'),re_path('delbooks/(\d+)', views.delbooks),re_path('editbooks/(\d+)', views.editbooks) ]?
view.py(視圖函數)
#為Book這個模型創建forms,為了渲染數據和校驗使用,所以這個類的字段必須和模型類有個邏輯上的關系 class BookForm(forms.Form):title=forms.CharField(max_length=32)
price= forms.DecimalField(max_digits=5,decimal_places=2)
pub_date = forms.DateField()
state=forms.ChoiceField(choices=((1,'已出版'),(2,'未出版'))) #選擇項,用的最多
publish=forms.ModelChoiceField(models.Publish.objects.all()) #一對多
authors=forms.ModelMultipleChoiceField(models.Author.objects.all()) #多對多 #對于publish和author這兩個一對多和多對多的字段也不用考慮那么多直接用formChoice字段,然后把所有的對象取出來賦值到里面就行
#查看書籍
def books(request):booklist = models.Book.objects.all()return render(request, 'books.html', {'booklist': booklist})
#添加書籍 def addbooks(request):
# 通過form/ModelForm以及校驗標簽渲染字段以及輸入框
if request.method == 'POST':
form = Bookform(request.POST)
if form.is_valid():
form.save()
return redirect('/books/')
else:
return render(request, 'addbooks.html', {'form': form})
else:
# form=BookForm() #form組件形式,根據字段選擇不同的字段類型
return render(request, 'addbooks.html', {'form': form})
#編輯書籍 def editbooks(request, editbook_id):
editbook=models.Book.objects.filter(pk=editbook_id).first()
if request.method == 'POST':
form=BookForm(request.POST)
if form.is_valid():
form.save()
return redirect('/books/')
else:
return render(request,'editbooks.html',{'form':form})
else:
form=BookForm(edit_book)
return render(request,'editbooks.html',{'form':form})
?
轉載于:https://www.cnblogs.com/tjp40922/p/10279933.html
總結
以上是生活随笔為你收集整理的关于form组件的补充-------formChoice的全部內容,希望文章能夠幫你解決所遇到的問題。