zoukankan      html  css  js  c++  java
  • django Model

    django 中但凡设计到数据库操作,那就要使用到models.Model的丰富的API。(有好也有坏,好处是方便,不需要接触原生sql语句,坏处是以后优化不便)

    1.model表的创建

    继承django自带AbstractUser

    model.py

    from django.db import models
    from django.contrib.auth.models import AbstractBaseUser,AbstractUser
    
    
    class UserProfile(AbstractUser):
        phone = models.CharField(max_length=11,unique=True,verbose_name="手机号")
    
        class Meta:
            verbose_name = "用户信息"
            verbose_name_plural = verbose_name
    
    class Role(models.Model):
        name = models.CharField(max_length=20, verbose_name="角色名称")
        describe = models.CharField(max_length=200, null=True, blank=True, verbose_name="角色描述")
        create_time = models.DateTimeField(default=datetime.now, verbose_name="创建时间")
    
        class Meta:
            verbose_name = "角色"
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.name

    setting.py

    AUTH_USER_MODEL = 'user.UserProfile'
    
     
    唯一性约束:
    class MyModel(models.Model):
      field1 = models.CharField(max_length=50)
      field2 = models.CharField(max_length=50)
    
      class Meta:
        unique_together = ('field1', 'field2',)
    

      

    字段

    1、models.AutoField  自增列 = int(11)
       如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
    2、models.CharField  字符串字段
      必须跟 max_length 参数
    3、models.BooleanField  布尔类型=tinyint(1)
      不能为空,Blank=True
    4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
      继承CharField,所以必须 max_lenght 参数
    5、models.DateField  日期类型 date
      对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
    6、models.DateTimeField  日期类型 datetime
      同DateField的参数
    7、models.DecimalField 十进制小数类型 = decimal
      必须指定整数位max_digits和小数位decimal_places
    8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
      对字符串进行正则表达式
    9、models.FloatField  浮点类型 = double
    10、models.IntegerField  整形
    11、models.BigIntegerField  长整形
      integer_field_ranges = {
        'SmallIntegerField': (-32768, 32767),
        'IntegerField': (-2147483648, 2147483647),
        'BigIntegerField': (-9223372036854775808, 9223372036854775807),
        'PositiveSmallIntegerField': (0, 32767),
        'PositiveIntegerField': (0, 2147483647),
      }
    12、models.IPAddressField  字符串类型(ip4正则表达式)
    13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
      参数protocol可以是:both、ipv4、ipv6
      验证时,会根据设置报错
    14、models.NullBooleanField  允许为空的布尔类型
    15、models.PositiveIntegerFiel  正Integer
    16、models.PositiveSmallIntegerField  正smallInteger
    17、models.SlugField  减号、下划线、字母、数字
    18、models.SmallIntegerField  数字
      数据库中的字段有:tinyint、smallint、int、bigint
    19、models.TextField  字符串=longtext
    20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
    21、models.URLField  字符串,地址正则表达式
    22、models.BinaryField  二进制
    23、models.ImageField   图片
    24、models.FilePathField 文件
    

      

    二、字段参数

    1、null=True
      数据库中字段是否可以为空
    2、blank=True
      django的 Admin 中添加数据时是否可允许空值
    3、primary_key = False
      主键,对AutoField设置主键后,就会代替原来的自增 id 列
    4、auto_now 和 auto_now_add
      auto_now   自动创建---无论添加或修改,都是当前操作的时间
      auto_now_add  自动创建---永远是创建时的时间
    5、choices
    GENDER_CHOICE = (
            (u'M', u'Male'),
            (u'F', u'Female'),
        )
    gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
    6、max_length
    7、default  默认值
    8、verbose_name  Admin中字段的显示名称
    9、name|db_column  数据库中的字段名称
    10、unique=True  不允许重复
    11、db_index = True  数据库索引
    12、editable=True  在Admin里是否可编辑
    13、error_messages=None  错误提示
    14、auto_created=False  自动创建
    15、help_text  在Admin中提示帮助信息
    16、validators=[]
    17、upload-to
    

      

    附录表之间的关系

    1、一对多,models.ForeignKey(ColorDic)

         应用场景:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。

    2、一对一,models.OneToOneField(OneModel)

        应用场景:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)。

    3、authors = models.ManyToManyField(Author)

         应用场景:在某表中创建一行数据是,有一个可以多选的下拉框。

     2.Model操作:

    获取数据:有以下三种,并有各自的优缺点:

    (1)Person.objects.all()   返回对象是QuerySet类型

    (2)Person.objects.filter()  返回对象是QuerySet类型(如果为空则返回空[ ]),可以写入多个条件,以逗号分隔

    (3)Person.objects.get(name=name)   获取一个对象,返回对象

     注意点:get()多于一个或者没有都会报错,

    ####搜索源为列表时,Person.objects.filter(id__in=[ ])#####

    ####filter()多个条件时#########

    from django.db.models import Q
    xxx.objects.filter(Q(role = 'A' and state = 'A_state') | Q(role ='B' ) | Q(role ='C' ) | Q(role ='D' ) | Q(role = 'E' and state!='E_state') )
    这样就好了,Q这个组件弄的查询条件可以or 或者and即,“|”,“&”都可以

    创建数据:

    1.user.objects.create(name=name,age=age)

    2.

    user=UserModel()
    user.name="somebody"
    user.email="@163.com"
    user.save()

    QuerySet对象可迭代

    更新数据

    user.objects.filter(name="someone").update(age=18)

    删除数据:

    user.objects.filter(name="someone").delete()

    多对多外键查询:

    用户-角色-权限

    场景:查询该用户下的所有权限

    models.py

    class UserProfile(AbstractUser):   
        def has_permissons(self):
            """
            查询该用户所有权限
            :return:
            """
            roles = self.userrole_set.all()
            permissions = []
            for i in roles:
                p_name = [j.permission.name for j in i.role.rolepermission_set.all()]
                permissions.extend(p_name)
    
            return permissions
    
        def has_roles(self):
            """
            查询该用户所有角色
            :return: objects 列表
            """
            return self.userrole_set.all()
    
    class Role(models.Model):
        pass
    
    class UserRole(models.Model):
        pass
    
    class Permission(models.Model):
        pass
    
    class RolePermission(models.Model):
        pass    
    

      

      

  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/zenan/p/8214606.html
Copyright © 2011-2022 走看看