【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

简介

Form、ModelForm都是django下forms下的类

  • django.forms.Form
  • django.forms.ModelForm

Form能做到:

  • 校验用户POST的数据是否满足数据库设计要求
  • 不满足要求时,生成错误提示
  • 于views.py定义form中多个字段,“自动”被html页面继承

ModelForm 还能做到:

  • 基于models.py各字段(包含外键、包含元祖时),“自动”于views.py取到models的多个字段
    例如gender_list限定男和女
    depart_obj限定特定几个部门

ModelForm编写新增页面

views.py中

  1. 定义用户的ModelForm类
  • ①“class Meta:”
  • ②该用户类继承django.forms.ModelForm(可先引入django.forms)
  • ③用户类中“model = 具体数据库表”
  • ④用户类中“fields = 具体数据库表的具体字段” 或 = “all
  1. 将用户类作为变量(“form”)传入request函数,最终传入html
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

html中

  • 循环传入变量(“form”),取名“field”
  • field.label 源自 models.py中该字段的verbose_name
  • field在每次循环中,等同于具体的form.name、form.age、form.password……
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

  • field有特定值时,例如“男”、“女”,html最终呈现为下拉框选项
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

  • field有特定外键值时,例如“吹牛部”、“趟平部”,但html默认呈现为object
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

此时需要在models.py,对具体表做特别定义,使该表(作为对象)返回的值默认为具体某个字段
【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)
【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)


  • 由于html中,{{ field }}不能额外定义css样式
    那么如何实现应用Bootstrap的class?——在views.py中的用户类中做定义
  1. 逐个定义Bootstrap的样式
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

  1. 批量定义Bootstrap的样式
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)
    【django入门】 15 ModelForm关联MySQL“多”字段表(增-页面)

↑ 阅读django源码,才可发现这个方法:
用户类的super(),即django的ModelForm——的fiels.items()
包含name和field,其中可以在field.widget.attrs定义class


来源:BV1NL41157 武沛齐《2022 B站最详细django3教程(django从入门到实践)》P32-P33

上一篇:form-serialize-serializeArray-submit


下一篇:day23 stark组件开发之添加功能实现