
创建并配置应用目录
只要在模型表单中创建出来的字段, 那么在form.py中就不需要创建了,只需要指定 模型就可以了
示例:
1.定义模型
------------------>在models文件中
from django.db import models
# Create your models here.
class Author(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
headline = models.CharField(max_length=100)
body_text = models.TextField()
author = models.ManyToManyField(Author) # 和上方的Author关联
def __str__(self):
2.模型表单的使用-------->form.py文件
from django import forms #导入
from 应用目录名.models import Author #导入class 模型类.
class AuthorForm(forms.ModelForm):
class Meta: #直接把自带的Meta拿过来,
model = Author #关联模型
# fields = ['要校验的字段1',"要校验的字段2"] #靶想要校验的字段拿出来, 进行校验
#全部验证,__all__, 除了字段name之外,其他自己输入的字段都要验证.
fields = '__all__'
exclude = ['name']
注:.模型字段和表单字段的对应关系
点击进入文档
模型表单的两次迁移(form表单的迁移)
注:
*一个模型( 一个class )在迁移完成之后,在数据库中就会生成一张表.
表单验证在views文件
from django.shortcuts import render
# Create your views here.
from django.views import View
from 应用目录名.form import AuthorForm #导入表单
class Hello(View):
def get(self,request):
form = AuthorForm() #表单实例化
return (request,'the_15/hello.html',{"form":form , "post":True})
对应的``url`文件
from 应用目录名.views import Hello
from django.urls import path
urlpatterns = [
path('hello/',Hello.as_view,name = 'form_name'),
]
4.2 在form.py文件中
from django import forms
from the_15.models import Author
class AuthorForm(forms.ModelForm):
class Meta: #直接把自带的Meta拿过来
#模型表单和表单区别就在于,模型表单中校验不用在定义字段了
model = Author #关联模型
# fields = ['要校验的字段1',"要校验的字段2"] #靶想要校验的字段拿出来, 进行校验
fields = '__all__'
exclude = ['name']
#数据校验
def clean_email(self):
email = self.cleaned_data.get('email','')
if email.startswith('a'):
raise forms.ValidationError('您以a开头了')
return email
# Meta就是省略了人们写字段的这个步骤.
#对于不需要数据校验的表单,可以使用模板表单工厂函数,例如:
M2MForm = modelform_factory(Entry,fields='__all__') #Entry就是本例中要继承的模型.
这是html:
{% if post %}