在django中對表單form的定義涉及三個檔案:
1、model.py:
定義form對應到資料庫中的表,如:
from django.db import models
# create your models here.
from django.db import models
class
student
(models.model)
: ***_items =[(
1,'男'),(
2,'女'),(
0,'未知'),
] status_items =[(
0,'申請'),
(1,'通過'),
(2,'拒絕'),
] name = models.charfield(max_length=
128, verbose_name=
"姓名"
) *** = models.integerfield(choices=***_items, verbose_name=
"性別"
) profession = models.charfield(max_length=
128, verbose_name=
"專業"
) email = models.emailfield(verbose_name=
"email"
) qq = models.charfield(max_length=
128, verbose_name=
"qq"
) phone = models.charfield(max_length=
128, verbose_name=
"手機號碼"
) status = models.integerfield(choices=status_items, default=
0, verbose_name=
"審核狀態"
) created_time = models.datetimefield(auto_now_add=
true
, editable=
false
, verbose_name=
"建立時間"
) @property
def***_show
(self)
:return
dict
(self.***_items)
[self.***]
@classmethod
defget_all
(cls)
:return cls.objects.
all(
)class
meta
: verbose_name = verbose_name_plural =
"學員資訊"
def__str__
(self)
:return''.
format
(self.name)
2、admin.py:from django.contrib import admin
from
.models import student
@admin.register(student)
class
studentadmin
(admin.modeladmin)
: list_display =
['id'
,'name'
,'***'
,'profession'
,'email'
,'qq'
,'phone'
,'status'
,'created_time'
] list_filter =
('***'
,'status'
,'created_time'
) search_fields =
('name'
,'profession'
) fieldsets =((
none,)
,)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django import forms
import re
from
.models import student
class
studentform
(forms.modelform)
:# 增加qq號必須為純數字的校驗
defclean_qq
(self)
: cleaned_data = self.cleaned_data[
'qq']if
not cleaned_data.isdigit():
raise forms.validationerror(
'必須是數字!'
)return
int(cleaned_data)
# 增加手機號是否合法的驗證
defclean_phone
(self)
:"""
通過正規表示式驗證手機號碼是否合法
:return: 手機號碼
"""mobile = self.cleaned_data[
'phone'
] mobile_regex = r'^1[34578]\d$'
p = re.
compile
(mobile_regex)
if p.match(mobile)
:return
int(mobile)
else
:raise forms.validationerror(
'請填入有效的手機號碼。'
, code=
'invalid mobile'
)class
meta
: model = student # 復用models.py裡面的**
# 前台顯示可編輯的字段
fields =
('name'
,'***'
,'profession'
,'email'
,'qq'
,'phone'
)
clean_開頭的函式,django會逐個執行,所以可以在這些函式中對前台提交的字段數進行驗證。
forms.py中clean開頭的函式執行地方在儲存資料到instance的時候:
django學習 Form表單
在驗證某個欄位的時候,可以傳遞乙個validators引數用來指定驗證器,對資料進行進一步的過濾。驗證器有很多,但是很多驗證器我們其實已經通過這個field或者一些引數就可以指定了。比如emailvalidator,我們可以通過emailfield來指定,比如maxvaluevalidator,我們...
Struts 中表單Form型別轉換問題
五一快到,辦公室天天有人討論去哪去哪玩的,明天公司又集體組織在島內玩一天,現在都沒什麼心思工作了,還好任務不多,老總出差不在,可以放肆一下,呵呵.翻了翻以前學習web開發時留下的學習文件,感覺有些拿出來複習複習還是很有用的。下面是一篇有關structs在presentation層資料型別轉換的一些問...
Django中 form表單的使用
from django import forms 第一步 首先在models.py中定義乙個表單模型 class remarkform forms.form subject forms.charfield max length 100 label mail forms.emailfield labe...