1. 程式人生 > 其它 >Pycharm開發Django專案模型常用屬性

Pycharm開發Django專案模型常用屬性

模型常用屬性

常用欄位:

Django中,定義了一些Field來與資料庫表中的欄位型別來進行對映。以下將介紹那些常用的欄位型別。

AutoField:

對映到資料庫中是int型別,可以有自動增長的特性。一般不需要使用這個型別,如果不指定主鍵,那麼模型會自動的生成一個叫做id的自動增長的主鍵。如果你想指定一個其他名字的並且具有自動增長的主鍵,使用AutoField也是可以的。

BigAutoField:

64位的整形,類似於AutoField,只不過是產生的資料的範圍是從1-9223372036854775807

BooleanField:

在模型層面接收的是True/False。在資料庫層面是tinyint

型別。如果沒有指定預設值,預設值是None

CharField:

在資料庫層面是varchar型別。在Python層面就是普通的字串。這個型別在使用的時候必須要指定最大的長度,也即必須要傳遞max_length這個關鍵字引數進去。

DateField:

日期型別。在Python中是datetime.date型別,可以記錄年月日。在對映到資料庫中也是date型別。使用這個Field可以傳遞以下幾個引數:

  1. auto_now:在每次這個資料儲存的時候,都使用當前的時間。比如作為一個記錄修改日期的欄位,可以將這個屬性設定為True
  2. auto_now_add:在每次資料第一次被新增進去的時候,都使用當前的時間。比如作為一個記錄第一次入庫的欄位,可以將這個屬性設定為True

DateTimeField:

日期時間型別,類似於DateField。不僅僅可以儲存日期,還可以儲存時間。對映到資料庫中是datetime型別。這個Field也可以使用auto_nowauto_now_add兩個屬性。

TimeField:

時間型別。在資料庫中是time型別。在Python中是datetime.time型別。

EmailField:

類似於CharField。在資料庫底層也是一個varchar型別。最大長度是254個字元。

FileField:

用來儲存檔案的。這個請參考後面的檔案上傳章節部分。

ImageField:

用來儲存圖片檔案的。這個請參考後面的圖片上傳章節部分。

FloatField:

浮點型別。對映到資料庫中是float型別。

IntegerField:

整形。值的區間是-2147483648——2147483647

BigIntegerField:

大整形。值的區間是-9223372036854775808——9223372036854775807

PositiveIntegerField:

正整形。值的區間是0——2147483647

SmallIntegerField:

小整形。值的區間是-32768——32767

PositiveSmallIntegerField:

正小整形。值的區間是0——32767

TextField:

大量的文字型別。對映到資料庫中是longtext型別。

UUIDField:

只能儲存uuid格式的字串。uuid是一個32位的全球唯一的字串,一般用來作為主鍵。

URLField:

類似於CharField,只不過只能用來儲存url格式的字串。並且預設的max_length是200。


Field的常用引數:

null:

如果設定為TrueDjango將會在對映表的時候指定是否為空。預設是為False。在使用字串相關的Field(CharField/TextField)的時候,官方推薦儘量不要使用這個引數,也就是保持預設值False。因為Django在處理字串相關的Field的時候,即使這個Fieldnull=False,如果你沒有給這個Field傳遞任何值,那麼Django也會使用一個空的字串""來作為預設值儲存進去。因此如果再使用null=TrueDjango會產生兩種空值的情形(NULL或者空字串)。如果想要在表單驗證的時候允許這個字串為空,那麼建議使用blank=True。如果你的FieldBooleanField,那麼對應的可空的欄位則為NullBooleanField

blank:

標識這個欄位在表單驗證的時候是否可以為空。預設是False
這個和null是有區別的,null是一個純資料庫級別的。而blank是表單驗證級別的。

db_column:

這個欄位在資料庫中的名字。如果沒有設定這個引數,那麼將會使用模型中屬性的名字。

default:

預設值。可以為一個值,或者是一個函式,但是不支援lambda表示式。並且不支援列表/字典/集合等可變的資料結構。

primary_key:

是否為主鍵。預設是False

unique:

在表中這個欄位的值是否唯一。一般是設定手機號碼/郵箱等。

更多Field引數請參考官方文件:https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/

模型中Meta配置:

對於一些模型級別的配置。我們可以在模型中定義一個類,叫做Meta。然後在這個類中新增一些類屬性來控制模型的作用。比如我們想要在資料庫對映的時候使用自己指定的表名,而不是使用模型的名稱。那麼我們可以在Meta類中新增一個db_table的屬性。示例程式碼如下:

class Book(models.Model):
    name = models.CharField(max_length=20,null=False)
    desc = models.CharField(max_length=100,name='description',db_column="description1")

    class Meta:
        db_table = 'book_model'

以下將對Meta類中的一些常用配置進行解釋。

db_table:

這個模型對映到資料庫中的表名。如果沒有指定這個引數,那麼在對映的時候將會使用模型名來作為預設的表名。

ordering:

設定在提取資料的排序方式。後面章節會講到如何查詢資料。比如我想在查詢資料的時候根據新增的時間排序,那麼示例程式碼如下:

class Book(models.Model):
    name = models.CharField(max_length=20,null=False)
    desc = models.CharField(max_length=100,name='description',db_column="description1")
    pub_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'book_model'
        ordering = ['pub_date']