Django-----常用模型&字段&Meta配置

模型常用属性

常用字段

在Django中,定义了一些Field来写数据库表中的字段来进行映射。以下将介绍那些常用的字段类型。

AutoField

映射到数据库中的是int类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动的生成一个叫做id的自动增长的主键。如果你想指定一个其他名字的并且具有自动增长的主键,使用AutoField也是可以

# 必须设置为主键
id = model.AutoField(primary_key=True)

BigAutoField

64位的整形,类似于AutoField,只不过是产生的数据的范围是从:1-9223372036854775807。

 id = models.BigAutoField(primary_key=True)

BooleanField

在模型层面接收的是True/False。在数据库层面是tinyint类型。

remove = models.BooleanField(null=True)

NullBooleanField

在模型层面接收的是True False or Null

remove = models.NullBooleanField()

CharField

在数据库层面是varchar类型。在Python层面就是普通的字符串。这个类型在使用的时候必须要指定最大的长度,也即必须要传递max_length这个关键字参数进去。

name = models.CharField(max_length=200)

FloatField

在数据库层面是double类型,在Python层面就是浮点类型。

price = models.FloatField()

IntegerField

整形。值的区间是-2147483648-2147483647

BigIntegerField

大整形。值的区间是-9223372036854775808——9223372036854775807。

PositiveIntegerField

正整形。值的区间是0-2147483647

SmallIntegerFiel

小整形。值的区间是-32768-32767

PositiveSmallIntegerField

正小整数型。值的区间是0-32767

EmailField

类似于CharField。在数据库底层也是一个varchar类型,最大的值为254,一般用于在from表单中的邮箱判断。

TextField

大量的文本类型。映射到数据库中是longtext

content = models.TextField(null=True)

UUIDField

只能存储uuid格式的字符串。uuid是一个32位的全球唯一的字符串,一般用来作为主键。

FileField

用来存储文件的。

ImageField

用来存储图片文件的

URLField

类似于CharField,只不过只能用来存储url格式的字符串。并且默认的是max_length是200。

DateTimeField

日期时间类型,不仅仅可以存储日期,还可以存储时间。映射到数据库中的是datetime类型。映射到数据库中的是datetime类型。默认情况下的TIME_ZONE = 'UTC'代表着格林威治时间。

settings.py

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
  • auto_now : 在每次这个数据保存的时候,都要使用当前的时间。

  • auto_now_add: 在每次数据第一次被添加进去的时候,都使用当前的时间。比如作为一个记录第一次入库的字段,可以将这个属性设置为True。

class Time(models.Model):
    # auto_now:使用的是Django内置的时间,
    # auto_now:默认情况下使用的是False
    # 2020-06-30 04:21:58.549603 而为什么在数据库中显示的是这个时间
    # 现在编写的时间为 2020-06-30 12:20:41.784921
    # 主要的原因在项目设置里面的TIME_ZONE,
    # TIME_ZONE:使用的是UTC的时间
    # 把TIMe_ZONE改为Asia/Shanghai
    # 把USE_TZ = False
    today = models.DateTimeField(auto_now=True)
    today2 = models.DateTimeField(auto_now_add=True, null=True)

Field的常用参数

null

如果设置为True,Django将会在映射表的时候指定是否为空。默认是为False。在使用字符串相关的Field的时候,官方推荐尽量不要使用这个参数,也就是保存默认值为False。

db_column

这个字段在数据库中的名字。如果没有设置这个参数,那么将会使用模型中属性的名字。相当于是给数据库中的字段重新命名。

default

默认值。可以为一个值,或者是一个函数,但是不支持lambda表达式。并且不支持列表/字典/集合等可变的数据结构。

primary_key

是否为主键。默认是False。

模型中的Meta配置

对应一些模型级别的配置。我们可以在模型中定义一个类,叫做Meta。然后再这个类中添加一些类属性来控制模型的作用。比如我们想要在数据库映射的时候使用自己指定的表名,而不是使用模型的名称。那么我们可以在Meta类中添加一个db_table的属性。

  • 首先要在自己定义的模型类中定义一个相对应的嵌套类,而且这个类必须是Meta类

  • db_table : 传入一个字符串,指定映射到数据库中的表名,不使用app的名字。

  • ordering : 传入一个列表,在列表中指定相对应数据库字段的顺序,负号代表着倒序。

class ArticleDemo(models.Model):
    name = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return 'Book----name:%s,content:%s' % (self.name, self.content)
    # 必须要在定义的模型内部定义一个Meta这个类,而且不能随便更改名字等

    class Meta:
        # db_table : 相当于就是不使用创建的app对应的名字,而是使用模型中定义的db_table对应的Book名字
        db_table = 'Book'
        # ordering:当传入的id为负的时候,显示的就是倒序输出
        ordering = ['-id']

在这里插入图片描述

from django.shortcuts import render
from django.http import HttpResponse
from .models import ArticleDemo
from datetime import datetime


def index(request):
    articles = ArticleDemo.objects.all()
    """
    <QuerySet [<ArticleDemo: Book----name:这是第三篇文章,content:外键和表>, 
    <ArticleDemo: Book----name:这是第二篇文章,content:模型中的Meta配置>, 
    <ArticleDemo: Book----name:这是第一篇文章,content:模型的常用属性>]>
    """
    print(articles)
    # article.save()
    return HttpResponse('这是首页')

猜你喜欢

转载自blog.csdn.net/qq_37662827/article/details/107043548