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)

posted @ 2017-04-14 16:25  魅力宁波  阅读(132)  评论(0)    收藏  举报