django中ModelForm和bootstrap的继承

我们在django中用form自动创建表单的时候,正常创建是没有任何样式的,我们可以采用以下两种方式去给我们的表单加上bootstrap的样式

from django import forms
class UserAdd(forms.ModelForm):
    name = forms.CharField(min_length=3,label='用户名',widget=forms.TextInput(attrs={"class":"form-control"})
    class Meta:
        model = models.UserInfo
        fields = ["name","password","age"]
from django import forms
class UserAdd(forms.ModelForm):
    name = forms.CharField(min_length=3)
    class Meta:
        model = models.UserInfo
        fields = ["name","password","age","creat_time","gender","depart"]
        widgets = {
            "name" : forms.TextInput(attrs={"class":"form-control"}),
        }

问题就来了,这样太那麻烦了,我们还可以重新定义一个init方法,循环modelform中的所有字段,给每个字段的插件设置一个属性,但是这样是直接设置了属性,要是原本的字段有属性就会被覆盖。

from django import forms
class UserAdd(forms.ModelForm):
    name = forms.CharField(min_length=3)
    class Meta:
        model = models.UserInfo
        fields = ["name","password","age","creat_time","gender","depart"]
        # widgets = {
        #     "name" : forms.TextInput(attrs={"class":"form-control"}),
        # }
#循环modelform中的所有字段,给每个字段的插件设置一个属性
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for name,field in self.fields.items():
            field.widget.attrs = {"class": "form-control"}

改进,加入if else语句,解决上述问题

但是这里考虑到代码重复的问题,利用类和面向对象中的继承,我写一个BootStrapModelForm的大类,让他单独放到一个目录里面然后进行继承,这样我的视图函数里面就只有下面的一点内容

#先自定义类
class BootStrapModelForm(forms.ModelForm):
#循环modelform中的所有字段,给每个字段的插件设置一个属性
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for name,field in self.fields.items():
           #字段中有属性,保留,没有则添加
            if field.widget.attra:
                field.widget.attrs['class'] = 'form-control'
                field.widget.attrs['placeholder'] = field.label
            else:
                field.widget.attrs = {
                    'class' : 'form-control',
                    'placeholder' : field.label}    
#继承
class UserEditModelForm(BootStrapModelForm):
    class Meta:
        model = model.UserInfo
        fields = ['name','password','age']

演示图

view视图函数中的各项包括form都可以再分的,我这里将视图函数中的各个函数、form和继承的bootstrap都分开了

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxgbieshuomeibanfa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值