ModelForm用法讲解

模型表单:

首先我们在在定义一个模型类:

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')
    else:
        print(form.errors.get_json_data())
        return HttpResponse('FAIL')

猜你喜欢

转载自www.cnblogs.com/nihao2/p/12291571.html