Django ModelForm (一)

首先看一个比较基础的form验证:

#views.py

from django.shortcuts import render # Create your views here. from django import forms from django.forms import fields from cmdb import models ##form验证: #userinfoform --> form -->baseform(is.valued) ##---> 意思为继承 class UserInfoForm(forms.Form): username = fields.CharField(max_length=32,label="用户名") password = fields.CharField(max_length=32) email = fields.EmailField() user_type = fields.ChoiceField( choices = models.UserType.objects.values_list('id','caption') ) def index(request): if request.method == 'GET': obj = UserInfoForm()             ##常规form对象 return render(request,'index.html',{'obj':obj}) elif request.method == "POST": obj = UserInfoForm(request.POST)       #form验证 print (obj.is_valid()) print (obj.cleaned_data) print (obj.errors) ##插入数据到数据库 #models.UserInfo.objects.create(**obj.cleaned_data) #更新数据 #models.UserInfo.objects.filter(id='1').update(**obj.cleaned_data) #obj.is_valid() return render(request,'index.html',{'obj':obj})

 

models.py

from django.db import models

# Create your models here.

class UserType(models.Model):
    caption = models.CharField(max_length=32)


class UserInfo(models.Model):
    username = models.CharField(verbose_name="用户",max_length=32)
    password = models.CharField(max_length=32)
    email = models.EmailField()
    user_type = models.ForeignKey(to="UserType",to_field="id")

  

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action='/index/' method="POST">
        {% csrf_token %}
        {{ obj.as_p }}
        <input type="submit" value="提交">
    </form>
</body>
</html>

 

modelform示例

views.py(models.py同上)

from django.shortcuts import render

from django import forms
from django.forms import fields
from cmdb import models

##form验证:
    #userinfoform --> form -->baseform(is.valued)   ##---> 意思为继承

#modelform验证:
    #userinfomodelform --> modelform ----> basemodelform --> baseform

class UserInfoModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo       ##UserInfo 为models下定义的类(表名),表示去哪个类下获取字段,也可以对此表进行增删改查
        fields = '__all__'           #代表所有字段
        
     #fields = ['username']       #只列出username列,这里定义为一个里列表
        #exclude = ['username']       #表示排除username列,其余都列出


#class UserInfoForm(forms.Form):
#    username = fields.CharField(max_length=32,label="用户名")
#    password = fields.CharField(max_length=32)
#    email = fields.EmailField()
#    user_type = fields.ChoiceField(                        #form ,代替models里的外键
#        choices = models.UserType.objects.values_list('id','caption')
#    )

#modelform 验证
def index(request):
    if request.method == 'GET':
        obj = UserInfoModelForm()        #modelform对象,也会自动生成html对象
        return render(request,'index.html',{'obj':obj})
    elif request.method == "POST":
      
        ##modelform 验证(与form方法一样)
        obj = UserInfoModelForm(request.POST)
        print (obj.is_valid())
        print (obj.cleaned_data)
        print (obj.errors)

        ##插入数据到数据库
        #models.UserInfo.objects.create(**obj.cleaned_data)
        #更新数据
        #models.UserInfo.objects.filter(id='1').update(**obj.cleaned_data)

        return render(request,'index.html',{'obj':obj})

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action='/index/' method="POST">
        {% csrf_token %}
        {{ obj.as_p }}  //as_json/as_table均可以
        <input type="submit" value="提交">
    </form>
</body>
</html>

 

点击提交后

 

 圆圈中为email输入框未按规定格式输入

 

posted @ 2018-01-24 22:15  FRESHMANS  阅读(165)  评论(0编辑  收藏  举报