zoukankan      html  css  js  c++  java
  • Django——ModelForm(建立,参数,自定义错误验证)

    ModelForm(强大的数据验证,适中的数据库操作)

    Form:
    UserForm -> Form -> BaseForm

    ModelForm:
    UserModelForm -> ModelForm -> BaseModelForm -> BaseForm

    添加信息

    修改信息

     1 from django import forms
     2 from cmdb import models
     3 
     4 class UserModelForm(forms.ModelForm):
     5     class Meta:
     6         model = models.User
     7         fields = "__all__"
     8 
     9 
    10 def add(request):
    11     if request.method == "GET":
    12         obj = UserModelForm()
    13         return render(request,'mf.html',{'obj': obj})
    14     elif request.method == "POST":
    15         obj = UserModelForm(request.POST)
    16         if obj.is_valid():
    17             # print(obj.cleaned_data)
    18             # models.User.objects.create(**obj.cleaned_data)
    19             obj.save(commit=True)
    20             """
    21             mobj = obj.save(commit=False)
    22             mobj.save()
    23             obj.save_m2m()
    24             """
    25         print(obj.errors)
    26         return render(request, 'mf.html', {'obj': obj})
    27 
    28 def edit(request,nid):
    29     if request.method == "GET":
    30         model_obj = models.User.objects.get(id=nid)
    31         obj =UserModelForm(instance=model_obj)
    32         return render(request, 'mf1.html', {'obj': obj,'nid': nid})
    33     elif request.method == 'POST':
    34         model_obj = models.User.objects.get(id=nid)
    35 
    36         obj = UserModelForm(request.POST, instance=model_obj)
    37         if obj.is_valid():
    38             obj.save()
    39         return render(request, 'mf1.html', {'obj': obj})
    View Code

    model+form ==> 验证+数据库操作

    a. 因为用的字段是model里的,所以要在model里配置参数等

    b.在modelform中写参数

    class Meta:		# 在modelform里的参数都是{}格式的,而且参数之间不加逗号
        model,                           # 对应Model的
        fields=None,                     # 字段
        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=('birth_date',) # 本地化,如:根据不同时区显示数据
        如:
            数据库中
                2016-12-27 04:10:57
            setting中的配置
                TIME_ZONE = 'Asia/Shanghai'
                USE_TZ = True
            则显示:
                2016-12-27 12:10:57
    

    自定义验证:

    3个属性(is_vaild,errors,cleaned_data)和3个钩子(自定义错误验证)和form一样

  • 相关阅读:
    【MYSQL】某些有用的sql【持续更新中】
    【LDAP】什么时候需要使用LDAP?
    【LDAP】 objectClass 分类
    MySQL的锁机制
    spring的事务传播级别及场景
    @NotEmpty,@NotNull和@NotBlank的区别
    mysql的字段为bit时,插入数据报Data too long
    activeMQ启动报--找不到或无法加载主类
    【ListViewJson】【com.demo.app】【AppException】源码分析及其在工程中作用
    【ListViewJson】【com.demo.app】【AppConfig】源码分析及其在工程中作用
  • 原文地址:https://www.cnblogs.com/x54256/p/7823015.html
Copyright © 2011-2022 走看看