zoukankan      html  css  js  c++  java
  • Django中的Model、Form和ModelForm

    一  Model(数据库操作)

    1 数据表操作

    两种类型:

    • Code First:创建类→自动生成表
    • DB First:创建表→自动生成类  (很少用)

    单表操作:

    一对多:(Forienkey)

    多对多:(ManytoMany)

    一对一(OneToOne):

    应用场景:单表特别大,字段比较多的情况,可以把单表拆成两个,做一对一对应。

    2 数据行操作

    • 数字
    • 字符串(带正则的字段)
    • 时间
    • 文件

    http://www.cnblogs.com/wupeiqi/articles/6216618.html

    二  Form(用户请求的验证)

    三  ModelForm(数据库操作和用户请求验证部分功能)

    1. 定义ModelForm类

    from django import forms
    from app01 import models
    
    class UserModelForm(forms.ModelForm):
        class Meta:
            model = models.User     #关联的model类
            fields = "__all__"      #或('name','email','user_type')    #验证哪些字段,"__all__"表示所有字段
            exclude = None          #排除的字段
            labels = None           #提示信息
            help_texts = None       #帮助提示信息
            widgets = None          #自定义插件
            error_messages = None   #自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
            field_classes = None    #自定义字段类(也阔以自定义字段)
            localized_fields = ()   #本地化,根据settings中TIME_ZONE设置的不同时区显示时间
    

    2. ModelForm验证执行的过程

    Form所有的钩子ModelForm都有。

    is_valid() --> self.errors --> full_clean() -->  self._clean_fields() -->  clean_字段名(自定义方法)
                              self._clean_form() -->  clean(self) 
                              self._post_clean() (整体错误)

    clean_字段名(自定义方法)

    可以抛出异常
        def clean_username(self):
            value = self.cleaned_data['username']
            if value == 'root':
                return value
            else:
                raise ValidationError("你不是管理员!")
    

    3. 验证

    obj = UserModelForm()
    obj.is_valid()
    obj.errors.as_json()
    obj.clean()
    obj.cleaned_data
    

    4. 创建

    user_obj = models.User.objects.get(id=nid)
    model_form_obj = UserModelForm(instance=user_obj)
    model_form_obj = UserModelForm(request.POST)
    model_form_obj.is_valid()
    model_form_obj.save()    #默认save(commit=True),默认保存多对多,当commit=False时可以拆分保存操作
    #拆分为两步:
    obj = obj.save(commit=False)
    obj.save()    #保存请求表数据
    model_form_obj.save_m2m()  #保存多对多数据
    

    5.  更新和初始化

    obj = model.tb.objects.get(id=1)
    model_form_obj = XXOOModelForm(request.POST,instance=obj)
    
    #初始化
    model_form_obj = XXOOModelForm(initial={...})
    
  • 相关阅读:
    16-异常
    Linux 常用命令
    项目依赖子项目的类
    Struts2
    博客园【上吊猫】
    LayUI【基本使用】
    idea中隐藏.iml文件
    Session 使用
    博客园右下角看板娘特效,多种样式可选
    枚举
  • 原文地址:https://www.cnblogs.com/pyramid1001/p/6229875.html
Copyright © 2011-2022 走看看