Django学习笔记009-Form组件与ModelForm组件

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/')
    

你可能感兴趣的:(modelformdjango)