1. 程式人生 > 實用技巧 >django學習第十五天

django學習第十五天

基於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'})