zoukankan      html  css  js  c++  java
  • Django之ModalForm

    ModelForm

    自己定义的form--->Form--->BaseForm

    自己定义的ModelForm--->ModelForm--->BaseModelForm--->BaseForm

    从上面可以看出form和ModelForm都是继承BaseForm,所以在Form中有的方法在ModelForm中也是有的,包括is_valid(),cleaned_data,errors

     1 ModelForm
     2     a.  class Meta:
     3             model,                           # 对应Model的
     4             fields=None,                     # 字段
     5             exclude=None,                    # 排除字段
     6             labels=None,                     # 提示信息
     7             help_texts=None,                 # 帮助提示信息
     8             widgets=None,                    # 自定义插件
     9             error_messages=None,             # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
    10             field_classes=None               # 自定义字段类 (也可以自定义字段)
    11             localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据
    12             如:
    13                 数据库中
    14                     2016-12-27 04:10:57
    15                 setting中的配置
    16                     TIME_ZONE = 'Asia/Shanghai'
    17                     USE_TZ = True
    18                 则显示:
    19                     2016-12-27 12:10:57
    20     b. 验证执行过程
    21         is_valid -> full_clean -> 钩子 -> 整体错误
    22  
    23     c. 字典字段验证
    24         def clean_字段名(self):
    25             # 可以抛出异常
    26             # from django.core.exceptions import ValidationError
    27             return "新值"
    28     d. 用于验证
    29         model_form_obj = XXOOModelForm()
    30         model_form_obj.is_valid()
    31         model_form_obj.errors.as_json()
    32         model_form_obj.clean()
    33         model_form_obj.cleaned_data
    34     e. 用于创建
    35         model_form_obj = XXOOModelForm(request.POST)
    36         #### 页面显示,并提交 #####
    37         # 默认保存多对多
    38             obj = form.save(commit=True)
    39         # 不做任何操作,内部定义 save_m2m(用于保存多对多)
    40             obj = form.save(commit=False)
    41             obj.save()      # 保存单表信息
    42             obj.save_m2m()  # 保存关联多对多信息
    43  
    44     f. 用于更新和初始化
    45         obj = model.tb.objects.get(id=1)
    46         model_form_obj = XXOOModelForm(request.POST,instance=obj)
    47         ...
    48  
    49         PS: 单纯初始化
    50             model_form_obj = XXOOModelForm(initial={...})
     1 def index(request):
     2     if request.method == "GET":
     3         obj = UserModelForm()
     4         return render(request,"index.html",{'obj':obj})
     5     elif request.method == "POST":
     6         obj = UserModelForm(request.POST)
     7         if obj.is_valid()
     8             print(obj.cleand_data)
     9             obj.save()  # 直接将数据写入数据库
    10         return render(request,"index.html",{'obj':obj})
    11 
    12 def edit_index(request,nid):
    13     if request.method == "GET"
    14         model_obj = models.User.objects.get(id=nid)
    15         obj = UserModelForm(instance=model_obj)  # instance可以将之前数据渲染到前端
    16         reture render(request,"edit.html",  {"obj":obj})
    17     elif request.method == "POST":
    18         model_obj = models.User.objects.get(id=nid)
    19         obj = UserModelForm(request.post, instance=model_obj)  # 如果没有instance表示增加 如果有表示更新
    20         if obj.is_valid():
    21             obj.save()
    22         reture render(request,"edit.html",  {"obj":obj})
    示例
  • 相关阅读:
    grafana里prometheus查询语法
    Linux 高频工具快速教程
    国内开源镜像站点汇总
    Oracle DBLINK 简单使用
    启动OpenOffice服务
    使用openoffice转pdf,详细
    ORACLE数据库误操作执行了DELETE,该如何恢复数据?
    一个 介绍 superset Kylin 以及大数据生态圈的 博文
    Kylin介绍 (很有用)
    找到一些经验,关于使用thymeleaf时遇到的一些问题
  • 原文地址:https://www.cnblogs.com/harryblog/p/9655867.html
Copyright © 2011-2022 走看看