def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['hobby'].choices =models.Hobby.objects.all().values_list('id', 'name')
choice从数据库取值,重写init
还有钩子函数校验 没加
举例:
模型类:
对应form:
form的字段必须与前端标签的name值保持一致才能用form_obj=UserForm(request.POST)传值, 也要和模型类中表的字段一致才能插入数据库.
所以form的字段==前端标签的name值==models表中的字段
前台:
后端:
前端渲染form表单的三种方式:
第一种 {{ form_obj.as_p }}
渲染成3个p标签,每个p表面里面包一个label一个input
form_obj.as_p 通常不用,因为不够灵活