表单与模型
Django的表单类型由Form类来实现,主要分为两种
- django.forms.Form 一个基础的表单功能
- django.forms.ModelForm 在上一个基础上结合模型所生成的数据表单
传统的表单是在模板文件中HTML代码实现,一个完整的表单主要由4部分组成:
- 提交地址(form标签的action属性)用于设置用户提交的表单数据应由哪个路由接收和处理,当用户向服务器提交数据时,若属性action为空,则提交的数据应由当前的路由来接收和处理,否则页面会跳转到属性action所指向的路由地址
- 请求方式用于设置表单的提交方式,通常是GET请求或POST请求,由form标签的属性method决定
- 元素空间是提供用户输入数据信息的输入框,由HTML的控件实现,控件属性type用于设置输入框的类型,常用输入框类型有文本框,下拉框和复选框等
- 提交按钮供用户提交数据到服务器,该按钮也是HTML的控件实现的,但该按钮具有一定的特殊性
示例代码:
models.py
from django.db import models
# Create your models here.
class PersonInfo(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
age = models.IntegerField()
def __str__(self):
return self.name
class Meta:
verbose_name = '人员信息'
class Vocation(models.Model):
id = models.AutoField(primary_key=True)
job = models.CharField(max_length=20)
title = models.CharField(max_length=20)
payment = models.IntegerField(null=True, blank=True)
person = models.ForeignKey(PersonInfo, on_delete=models.CASCADE)
def __str__(self):
return str(self.id)
class Meta:
verbose_name = '职业信息'
分别对模型进行数据迁移,然后在数据表中添加一些数据
form.py
from django import forms
from .models import *
class VocationForm(forms.Form):
job = forms.CharField(max_length=20, label='职位')
title = forms.CharField(max_length=20, label='职称')
payment = forms.IntegerField(label='薪资')
# 设置下拉框的值
# 查询模型PersonInfo的数据
value = PersonInfo.objects.values('name')
# 将数据以为列表格式表示,列表元素为元组格式
choices = [(i+1, v['name']) for i, v in enumerate(value)]
# 表单字段设为ChoiceField类型,用生成下拉框
person = forms