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('這是首頁')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章