django學習第十五天
阿新 • • 發佈:2020-07-31
基於form元件和modelform元件改造圖書管理系統
- 詳情可以去圖書管理系統分類中檢視
基於form元件和modelform元件改造圖書管理系統
modelform的補充
class BookModelForm(forms.ModleForm): #書籍的名稱沒有最小長度的校驗,那麼我們就可以自己自定義在下面這麼寫,那麼它就會替換modelform幫我們自動生成的form屬性 title = forms.CharField(max_length=64,min_length=2) class Mate: #配置元資訊 model = models.Book #用於指定模型類 fields = '__all__' #指定Book模型類中的所有屬性 #fields=['title','price']#如果指定了model模型類中的屬性,那麼modeform就只會根據給出的屬性生成form屬性和對應的標籤 #exclude=['title','price'] #排除給出指定model模型類中的屬性,也就是會生成剩下屬性對應的form屬性 ''' modelform會自動將這些屬性轉換為跟上面BookForm類中定義的屬性一樣 Book類裡面的 pub = models.ForeignKey('Publish'),authors = models.ManyToManyField('Author') 會自動翻譯成如下 pub = forms.ModelChoiceField( label='出版社', queryset=models.Publish.objects.all(), ) authors = forms.ModelMultipleChoiceField( label='作者', queryset=models.Author.objects.all() ) ''' labels={'title':'書籍名稱',...} #指定label標籤內容 #labels如果不想寫的話可以在model模型類中定義verbose_name='書籍名稱' error_messages={'title':{'required':'不能為空',...},...} #錯誤提示資訊 widgets={'pub_date':forms.TextInput(attrs={'type':'date',...},...),...} #修改外掛標籤樣式 #想在自己定義的forms類在初始化的時候統一加一些樣式 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for name, field in self.fields.items(): # print(name, field) field.widget.attrs.update({'class': 'form-control'})