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