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

猜你喜欢

转载自www.cnblogs.com/weiweivip666/p/13406738.html