Django学习手册 - ORM数据类型

DOM 字段/参数

配置格式:

  Module.字段(参数)

 

常用的字段归纳:

数字

models.AutoField()                                    自增列(int),必须设置为主键
models.IntegerField()                                整型
models.FloatField()                                   浮点
models.DecimalField(max_digits=8,decimal_places=3)    精确浮点                                    

 

字符串

models.CharField()           字符串,必须设置max_length 参数
models.TextField(Field)      文本类型 

 

时间

models.DateField()
models.DateTimeField()


参数:
Auto_now              #现在时间(更新时间)
Auto_now_add          #创建时间


注:(更新时间使用)
更新方式一:
Obj = userinfo.objects.filter(id=1).update(name=”root”)    不生效

更新方式二:
Obj = userinfo.objects.filter(id=1).first()
Obj.save()
生效

 

其他

Models.BinaryField()            二进制
Models.ImageField()             图片
Models.FilePathField()          文件        

 

常用属性参数:

Null                 是否为空(T,F)
Default              默认参数
Primary_key          主键
Db_index             索引
Unique               唯一索引
Verbose_name         显示字段中文
choices               ->作用:1.在Django admin中显示下拉框,如下截图;2,避免连表查询,连表查询的效率非常低。
blank                 ->在Django admin中是否可以为空。null指的是在数据库中是否可以为空。
verbose_name      ->在Django admin中显示字段中文。
editable              ->在Django admin中是否可以被编辑。
error_messages    ->在Django admin中显示的错误信息
helt_text             ->在Django admin中显示提示信息
validators            ->在Django form,自定义错误信息。

 

 

在Django admin中生效的字段:

Emailfield ()                     
GenericIPAddressField()         
URLField()                         
EmailField(CharField)
IPAddressField(Field)
URLField(CharField)
SlugField(CharField)
UUIDField(Field)
FilePathField(Field)       参数: path, 文件夹路径 match
=None, 正则匹配 recursive=False, 递归下面的文件夹 allow_files=True, 允许文件 allow_folders=False, 允许文件夹 FileField(Field)       参数:     upload_to = "" 上传文件的保存路径     storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField) CommaSeparatedIntegerField(CharField)格式必须为逗号分割的数字 拓展: models.CharField  对应的是MySQL的varchar数据类型
char 和 varchar的区别 : char和varchar的共同点是存储数据的长度,不能 超过max_length限制, 不同点是varchar根据数据实际长度存储,char按指定max_length()存储数据;所有前者更节省硬盘空间;


返回值为字段在数据库中的属性,Django字段默认的值为:

       'AutoField': 'integer AUTO_INCREMENT',
            'BigAutoField': 'bigint AUTO_INCREMENT',
            'BinaryField': 'longblob',
            'BooleanField': 'bool',
            'CharField': 'varchar(%(max_length)s)',
            'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
            'DateField': 'date',
            'DateTimeField': 'datetime',
            'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
            'DurationField': 'bigint',
            'FileField': 'varchar(%(max_length)s)',
            'FilePathField': 'varchar(%(max_length)s)',
            'FloatField': 'double precision',
            'IntegerField': 'integer',
            'BigIntegerField': 'bigint',
            'IPAddressField': 'char(15)',
            'GenericIPAddressField': 'char(39)',
            'NullBooleanField': 'bool',
            'OneToOneField': 'integer',
            'PositiveIntegerField': 'integer UNSIGNED',
            'PositiveSmallIntegerField': 'smallint UNSIGNED',
            'SlugField': 'varchar(%(max_length)s)',
            'SmallIntegerField': 'smallint',
            'TextField': 'longtext',
            'TimeField': 'time',
            'UUIDField': 'char(32)',

 

联合索引设置

  在Django model中对一张表的几个字段进行联合约束和联合索引,例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录。

 class Cart(models.Model):
    user = models.ForeignKey(
        MyUser,
        verbose_name="用户"
    )
    goods = models.ForeignKey(
        Goods,
        verbose_name="商品"
    )
    num = models.IntegerField(
        verbose_name="商品数量"
    )
    is_select = models.BooleanField(
        default=True,
        verbose_name="选中状态"
    )
 
    class Meta:
        # 联合约束   其中goods和user不能重复
        unique_together = ["goods", "user"]
        # 联合索引
        index_together = ["user", "goods"]

unique_together = ["goods", "user"]  表示联合约束,其中"goods"和"user"表示不能重复,不能一样。

index_together = ["user", "goods"] 表示联合索引,其中"goods"和"user"联合同步查询,提高效率。

 

转载于:https://www.cnblogs.com/Anec/p/9526783.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值