閱讀簡要
首先我們要明白Django forms組件里的ChoiceField、ModelChoiceField和ModelMutipleChoiceField是繼承關系
ChoiceField
1. Django forms組件中ChoiceField字段是對models里choice的渲染 2. choices作用:在數據庫中用元組的第一項作為存儲的值,在顯示時,將元組的第二項作為顯示的內容,便於前端使用下拉框 3. 用get_xxxx_display()顯示第二項的值
class Authors(models.Model): name = models.CharField("姓名", max_length=32) gender = models.SmallIntegerField(choices=((1, "男"), (2, "女")), default=1)
ModelChoiceField
1. Django forms組件中ModelChoiceField字段是對models里Forekey的渲染 2. 在前端渲染為下拉菜單
class Book(models.Model): title = models.CharField("書名", max_length=32) publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE, verbose_name="出版社")
ModelMutipleChoiceField
1. Django forms組件中ModelMutipleChoiceField字段是對models里ManyToManyField的渲染
2. 在前端渲染為多選菜單
models.py
class Authors(models.Model): name = models.CharField("姓名", max_length=32) age = models.IntegerField("年齡") gender = models.SmallIntegerField(choices=((1, "男"), (2, "女")), default=1) def __str__(self): return self.name class Book(models.Model): title = models.CharField("書名", max_length=32) publish_time = models.DateField() publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE, verbose_name="出版社") authors = models.ManyToManyField(to="Authors") def __str__(self): return self.title class Publish(models.Model): name = models.CharField("出版社名", max_length=32) address = models.CharField("地址", max_length=32) def __str__(self): return self.name
forms.py
from django import forms class AuthorForm(forms.Form): name = forms.CharField(label="姓名", max_length=32) age = forms.IntegerField(label="年齡") gender = forms.ChoiceField(choices=((1, "男"), (2, "女"))) class BookForm(forms.Form): title = forms.CharField(label="書名", max_length=32) publish_time = forms.DateField(label="發行時間") publish = forms.ModelChoiceField(label="出版社", queryset=Publish.objects.all()) authors = forms.ModelMultipleChoiceField(label="作者", queryset=Authors.objects.all())
別忘記點贊哦! ~.~