python学习第二十三天
model操作
class User(models.Model)
name=models.CharField(max_length=32)
email=models.CharField(max_length=32)
class Meta:
db_table='表名' 自定义表名
index_together=[("name","email")] 联合索引,支持最左前缀匹配,查找条件需要包含联合索引最左边的关键词
unique_together=[("name","email")] 联合唯一索引
verbose_name_plural="admin显示的表名"
反向查找
class usertype():
.....
class user():
user=
pwd=
ut=models.fk('usertype',related_name='b',related_query_name='a') related_name,related_query_name设置一个即可
item =models.usertype.objects.all()
for v in item:
v.user_set.all() 反向查找每个usertype对应的所有user记录
v.b.all()或者v.a_set.all()
models.usertype.objects.all().values('user__pwd') 反向查找user表中的pwd列的记录
models.usertype.objects.all().values('a__pwd')
多对多
自定义关系表,并且在被关联表中定义ManyToMany字段,用though参数关联关系表,可用该字段进行查询
更多ORM操作 http://www.cnblogs.com/wupeiqi/articles/6216618.html
form验证
操作动态select标签
from django.forms.models import ModelChoiceField
class UserInfoForm (forms.Form):
user_type=field.ChoiceField(choices=[],widget=widgets.Select)
user_type2=field.CharField(widget=widgets.Select(choices=[]))
user_type3=ModelChoiceField(empty_lable='请选择用户类型',queryset=models.UserType.objects.all(),to_field_name='id')
def __init__(self,*args,**kwargs):
super(UserInfoForm,self).__init__(*args,**kwargs)
self.fields['user_type'].choices =models.UserType.objects.values_list('id','name')
self.fields['user_type2'].widget.choices=models.UserType.objects.values_list('id','name')
from app01.forms import UserInfoForm
obj =UserInfoForm({'username':'alex','user_type':'1'}) 括号内传入字典可初始化页面
自定义验证规则
from django.core.exceptions import VaildationError
class RF(forms.Form):
user=fields.CharField()
email=fields.EmailField()
def clean_user(slef):
xxxxxxxx自定义规则
if xx:
return self.cleand_data['user']
else:
raise ValidationError('用户已存在',code='xxx')
def clean(self)
c=数据库查询
if c:
return self.cleand_data
else:
raise ValidationError('用户名或密码错误')
def _post_clean(self):
pass
obj.errors {"__all__":[],"user":[]} __all__存放整体错误信息即clean方法返回的错误
序列化错误信息
from django.core.exceptions import VaildationError
class JsonCustomEncoder(json.JSONEncoder): 自定义json encoder
def default(self,field):
if isinstance(field,ValidationError):
return {'code':field.code,'messages':field.messages}
else:
return json.JSONEncoder.default(self,field)
def login(request):
........
ret={'status':True,'error':None,'data':None}
ret['error'] =obj.errors.as_data()
result=json.dumps(ret,cls=JsonCustomEncoder)
return HttpResponse(result)
django序列化
from django.core import serializers
v=models......
data =serializers.serialize("json",v)

浙公网安备 33010602011771号