一 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={...})