1、普通方式存在的问题:
用户提交的数据没有校验
页面上没有错误提示
页面上的每个字段都需要重写一次
关联的数据,需要手动获取并循环展示在页面上
2、Django组件
2.1Form组件
2.1ModelForm组件
2.1.1创建ModelForm
首先,我们需要定义一个ModelForm。在创建ModelForm时,需要通过指定Meta类来定义ModelForm的一些元信息,如所使用的model、fields等,如下所示:
from django import forms
from myapp.models import MyModel
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['field1', 'field2', 'field3']
输出对象时,如果想要定制的内容(构造函数)
总结:
- 在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
- 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
__str__方法需要返回一个字符串,当做这个对象的描写
########models.py##############
class UserInfo(models.Model):
'''员工表'''
name = models.CharField(verbose_name='姓名', max_length=16)
password = models.CharField(verbose_name='密码', max_length=64)
age = models.IntegerField(verbose_name='年龄')
account = models.DecimalField(
verbose_name='账户余额', max_digits=10, decimal_places=2, default=0)
create_time = models.DateTimeField(verbose_name='入职时间')
depart = models.ForeignKey(
to='Departement', to_field='id', null=True, blank=True, on_delete=models.SET_NULL)
gender_choices = (
(1,'男'),
(2,'女'),
)
gender = models.SmallIntegerField(verbose_name='性别',choices=gender_choices)
2.1.2 取标题verbose_name
模板取值
{{ form.name.label }}
2.1.3 显示关联字段(联表查询数据)
输出对象里,如果想要定制显示的内容
class Foo(object):
def __str__(self):
return "哈哈哈"
obj = Foo( )
print(obj)
#models.py
class Departement(models.Model):
'''部门表'''
title = models.CharField(verbose_name='部门名称', max_length=32)
def __str__(self):
return self.title
2.1.4 ModelForm添加CSS
*args是Python中的一种特殊语法,常用于函数参数中。其作用是允许在调用函数时传入任意数量的参数,这些参数将被打包成一个元组(tuple)的形式,因此在函数中可以使用类似于列表(list)的操作对这些参数进行处理。
*kwargs是Python中的另外一种特殊语法,与args的作用相似,允许在函数调用时传入任意数量的关键字参数。这些参数将被打包成一个字典(dict)的形式,因此在函数中可以轻松地使用键值对(key-value)的方式访问这些参数。
在Python中,args和kwargs可以组合使用,在函数中同时接受任意数量的位置参数和关键字参数。需要注意的是,在函数参数中,args参数必须在kwargs参数之前。
以下是一个**kwargs的示例代码:
下面是一个*args的示例代码:
2.1.5 显示错误信息
提示信息显示中文
settings.py
LANGUAGE_CODE = 'en-us'
更改为
LANGUAGE_CODE = 'zh-hans'
在页面上显示错误信息:
#views.py
return render(request,'user_model_form_add.html',{"form“:form})
{% for field in form %}
{{field}}
{{ field.errors}}
{% endfor %}
2.1.6 验证规则
form.is_valid()
form = UserModelForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('/user/list/')
2.1.7 写入数据库
form.save()
form = UserModelForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('/user/list/')