Django里的ModelForm组件

ModelForm组件

  • 自动生成HTML标签 + 自动读取关联数据
  • 表单验证 + 错误提示
  • 数据库进行:新建,修改

步骤如下:

  • 创建类
python 复制代码
# 在 views.py 文件里

# 创建一个类
class AssetModelForm(forms.ModelForm):
    class Meta:
        model = models.AssetSet 
        #fields = ['name', 'price', 'category', 'depart']  # 可以这么写
		fields = "__all__"
  • 视图函数
python 复制代码
# 在 views.py 里

def asset_add(request):
    """
    # 获取所有类型
    cat_list = models.AssetSet.category_choices
    dp_list = models.Department.objects.all()

    form = AssetForm()
    """
    
    cat_list = models.AssetSet.category_choices
    dp_list = models.Department.objects.all()
    form = AssetModelForm()

    return render(request, 'asset_add.html', {'cat_list': cat_list, 'dp_list': dp_list, 'form': form})
  • 前端页面
    在 html 页面里得用循环来显示从数据库获取的数据
html 复制代码
<form>
    <!-- {{ form.name }}
    {{ form.price }} -->

    {% for field in form %}
        {{ field }}
    {% endfor %}
</form>

效果如下:


如果要想添加在数据库没有的field到前端页面,可以这么操作

python 复制代码
# 在 views.py 文件里

class AssetModelForm(forms.ModelForm):
    newField = forms.CharField()  # 添加新的field
    class Meta:
        model = models.AssetSet 
        #fields = ['name', 'price', 'category', 'depart', 'newField']
        fields = "__all__"

效果如下:

添加了红色方框里的输入框


要想在 ModelForm 里对某一些 Field 添加 css 样式,可以这么操作

python 复制代码
# 在 views.py 文件里

class AssetModelForm(forms.ModelForm):
    newField = forms.CharField()
    class Meta:
        model = models.AssetSet 
        fields = ['name', 'price', 'category', 'depart']
        #fields = "__all__"

        """
        # 单一的给某个field添加样式
        widgets = {
            'category': forms.Select(attrs={'style': "width: 300px;"})
        }
        """

    # 给所有的 field 提供样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            if name == "price":
                continue
            field.widget.attrs['style'] = "width: 100px"

这样效果就呈现在下面


点个赞呗~

相关推荐
BinaryBoss2 分钟前
Python 从Maxcompute导出海量数据到文本文件(txt)或Excel
chrome·python·odps
落羽凉笙4 分钟前
Python基础(4)| 详解程序选择结构:单分支、双分支与多分支逻辑(附代码)
android·服务器·python
麦兜*6 分钟前
Spring Boot 整合 Apache Doris:实现海量数据实时OLAP分析实战
大数据·spring boot·后端·spring·apache
数据光子8 分钟前
【YOLO数据集】国内交通信号检测
人工智能·python·安全·yolo·目标检测·目标跟踪
源代码•宸8 分钟前
Golang基础语法(go语言指针、go语言方法、go语言接口、go语言断言)
开发语言·经验分享·后端·golang·接口·指针·方法
Bony-9 分钟前
Golang 常用工具
开发语言·后端·golang
pyniu11 分钟前
Spring Boot车辆管理系统实战开发
java·spring boot·后端
love_summer11 分钟前
深入理解Python控制流:从if-else到结构模式匹配,写出更优雅的条件判断逻辑
后端
牛奔13 分钟前
GVM:Go 版本管理器安装与使用指南
开发语言·后端·golang
武子康13 分钟前
大数据-207 如何应对多重共线性:使用线性回归中的最小二乘法时常见问题与解决方案
大数据·后端·机器学习