模型表单:
首先我们在在定义一个模型类:
from django.db import models from django.core import validators # Create your models here. class Book(models.Model): title = models.CharField(max_length=100) page = models.IntegerField() price = models.FloatField(validators=validators.MaxLengthValidator(limit_value =1000)) class User(models.Model): username = models.CharField(max_length=100) password = models.CharField(max_length=16) telephone = models.CharField(max_length=11)
然后在form文件里写 ,还可以自己定义错误信息在error_messages里写:
from django import forms from .models import Book class AddBookForm(forms.ModelForm): #ModelForm和Form用法一样 只不过能从模型中继承他的用法 def clean_page(self): page = self.cleaned_data.get('page') if page > 100: raise forms.ValidationError('价格不能大于100') return page class Meta: model = Book # fields 和exclude 必须要定义一个 # fields = '__all__' #Book模型上得所有字段我们都可以继承得到 # fields = ['title','page'] #只验证title和page 价格可以不用写 exclude = ['price'] #除了price 和field=['title','page']一样 error_messages = { #自己定义错误信息。 'page' :{ 'required':'请传入page参数', #一个字段都没有传 'invalid':'请输入一个可用得page参数' #传了错误得字段 }, 'title' :{ 'max_length' : 'title不能超过100个字符' }, 'price':{ 'max_value':'图书价格不能超过1000' } }
这样 我们在视图函数里引用form就可以了:
def add_book(request): form = AddBookForm(request.POST) if form.is_valid(): title = form.cleaned_data.get('title') page = form.cleaned_data.get('page') price = form.cleaned_data.get('price') print('title:{}'.format(title)) print('page:{}'.format(page)) print('price:{}'.format(price)) return HttpResponse('success')
form.save() #调用save方法就把数据保存到数据库中,不用一个一个取 else: print(form.errors.get_json_data()) return HttpResponse('FAIL')
save方法调用:
- 直接调用save方法必须保证表单上面已经有你这个模型所需要的所有的数据。
我们可以再写一个注册的modelform:
class RegisterForm(forms.ModelForm): pwd1 = forms.CharField(max_length=16,min_length=6) pwd2 = forms.CharField(max_length=16,min_length=6) def clean(self): clean_data = super().clean() pwd1 = clean_data.get('pwd1') pwd2 = clean_data.get('pwd2') if pwd1 != pwd2: raise forms.ValidationError('两次密码输入不一致') return clean_data class Meta: model = User exclude = {'password'}
然后在views里写
@require_http_methods('POST') def register(request): form = RegisterForm(request.POST) if form.is_valid(): user = form.save(commit=False) #只是会生成一个user对象,并不会保存到数据库 user.password = form.cleaned_data.get('pwd1') user.save() #这样就会将所有数据保存了。