• ModelForm用法讲解 save方法调用


    模型表单:

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

    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()    #这样就会将所有数据保存了。
  • 相关阅读:
    UTF8编码规则
    学习bat脚本的好网站
    ATL 中 USES_CONVERSION 的具体功能
    对销售代表的100个忠告
    linux下crontab的使用
    linux zip命令收藏
    如何从SCons中删除特定的文件
    努力奋斗,但不想像蚂蚁那样!
    你的成功在于你每天养成的习惯
    模板的语法
  • 原文地址:https://www.cnblogs.com/nihao2/p/12291571.html
Copyright © 2020-2023  润新知