Django 3.0 模型字段

本文详细介绍了Django3.1中模型字段的各种属性和类型,包括`null`、`blank`、`choices`、`db_column`等参数的作用,以及`AutoField`、`CharField`、`DateTimeField`、`FileField`等字段类型的用法。内容涵盖了字段的数据库行为、表单处理、验证和帮助文本等方面,对于Django开发者具有很好的参考价值。
摘要由CSDN通过智能技术生成

這些都是花時間整理的@@
對各位學習Django的朋友有幫助的話不免給我個鼓勵或按讚收藏喔 !
Django 3.1 模型字段文檔

null
預設為 False ,一旦改為 True ,資料庫欄位允許為空
null 參數只影響資料庫

blank
預設為 False,一旦改為 True ,表單字段允許為空
blank 參數只影響表單

Choices
默認為表單窗口小部件
標準格式範例 --> my_list = [ ( A , B ), ( A1 , B1 ), ( A2 , B2 )… ]
每個元組 ( ) 中的第一個元素 : 模型上的實際值 第二個元素 : 給人類看的名稱
實際值最好的做法是附值給一個變量
在Django3.0中添加了新類 TextChoices IntegerChoices Choices

db_column
資料庫欄位的名稱,預設 Django 會使用模型類字段的名稱

db_index
如果為 True, 為此 字段 創建數據庫索引

db_tablespace
如果字段已建立索引! 用於字段索引的資料庫表空間名字
默認為 DEFAULT_INDEX_TABLESPACE

default
如果該字段未提供值時,將使用默認值 !
default它可以是一個值,也可以是可調用對象,如果是可調用對象,將在實例化模型時會調用該對象
默認不能是可變對象(模型實例、串列、集合)
那如果要指定一個字典的JSONField使用函數:

def contact_default():
    return {"email": "to1@example.com"}

contact_info = JSONField("ContactInfo", default=contact_default)

小提醒 ! lambda匿名函數不能用於default,因為它不能透過遷移序列化

editable
默認為True,如果設為False 那麼該字段不會顯示在admin後台和ModelForm(表單),在模型驗證也會跳過

error_messages
參數接收字典類型。設置error_messages可以覆蓋引發的錯誤訊息,其中包含你要覆蓋的錯誤訊息以及錯誤訊息相匹配的鍵 !
錯誤訊息鍵包括null,blank,invalid,invalid_choice, unique,和unique_for_date。

help_text
幫助文本,會隨著表單控鍵一同顯示。
即便你不是使用表單,對於生成文檔也是很有用的
如果需要可以把HTML寫入help_text,但它不會自動轉譯成HTML
可以使用純文本或django.utils.html.escape轉譯HTML。這樣可以確保避免跨站點腳本攻擊

primary_key
如果設置為 True,表示為該模型主鍵
如果沒設置的話,Django會自動添加AutoField欄位來保留主鍵
primary_key可以在任何字段上設置

unique
如果設置為 True,表示在整個表中不能重複 ( 唯一 )
參數unique,在ManyToManyField、OneToOneField中沒有用
在unique為True時,您無需指定 db_index,因為unique意味著創建了索引。

unique_for_date
日期唯一

unique_for_month
月份唯一

unique_for_year
年份唯一

verbose_name
方便人閱讀的名稱,如未提供將使用 Django 字段的屬性名稱,然後會將下滑線轉換成空格

validators
驗證器文檔
為字段進行驗證,用於表單 (ModelForm) !

----------------------------------------------------- 分水嶺 ---------------------------------------------------------

AutoField 自動遞增欄位(int) ( **options )
根據ID自動遞增。
如果沒有指定其他字段為主鍵,那主鍵會自動添加到模型中 ! ! !

BigAutoField 大的自動遞增欄位(int) ( **options )
一個 64 位整數,與 AutoField 不同的地方在於它可以匹配從 1 ~ 9223372036584775807

BigIntegerField 大整數欄位(int) ( **options )
一個64位整數,非常類似於 IntegerField ,不同之處在於它保證可以匹配從 -9223372036854775808 ~ 9223372036854775807,字段默認表單小部件為 NumberInput

BinaryField 二進制欄位(max_length = None,** options)
一個用於存儲二進制數據的字段,它可以分配 bytes, bytearray、memoryview,有一個可選參數 max_length

BooleanField 布林欄位(** options)
只有 True / False ,窗口小部件默認形式為CheckboxInput

CharField 字串欄位(max_length = None,** options)
字符串字段,對於大量文本需求,請使用 TextField ,默認表單小部件為 TextInput ,有一個額外的 必須 ( 必填 )參數 max_length

DateField 日期欄位(auto_now = False,auto_now_add = False,** options)
日期,在 Python 中是由 datetime.date ( import datetime )實現
如果想修改字段 DateFielddefault=date.todaydatetime.date.today()
DateTimeFielddefault=timezone.now ( import django.utils.timezone.now()
此字段的默認表單小部件是 DateInput。
auto_now: 當每次保存對象時會將字段設置為 當前時間
auto_now_add: 首次創建對象時,Django 會將字段自動設置為當前日期。對於創建時間戳有用。請注意,始終使用當前日期。可以覆蓋默認值。因此,即使在創建對象時為此字段設置了一個值,也會忽略掉
小提醒 : auto_now_addauto_nowdefault 只能挑一種用,不然會出錯

DateTimeField 日期時間欄位(auto_now = False,auto_now_add = False,** options)
日期和時間在 Python以 datetime.datetime ( import datetime 實現。與 DateField 有相同的額外參數。
此字段的默認表單窗口小部件為單個 DateTimeInput。管理員使用TextInput帶有JavaScript快捷方式的兩個單獨的小部件

DecimalField 小數欄位(max_digits =None,decimal_places =None,**options)
固定精度的十進制數字,在 Python 中由 Decimal實例表示。它使用驗證輸入 DecimalValidator ( validators )。
有兩個必需參數
max_digits : 允許數字最大位數(包含小數位),或等於 decimal_places 。
decimal_places : 小數位數。該字段的默認表單小部件為NumberInput

DurationField 持續時間欄位( ** options )
用于存儲时間周期的字段——在Python中按時間遞增。

EmailField 信箱欄位(max_length = 254,** options)
使用EmailValidator來檢查該值是否是有效的電子郵件地址 。

FileField 檔案欄位(upload_to = None,max_length = 100,** options) Storage類
文件上傳字段,有兩個可選參數 upload_to: 此屬性提供上傳目錄和文件名的方法
此字段的默認表單小部件是 ClearableFileInput 。另外在模型中使用 FileFieldImageField 需要執行幾個步驟:

  1. 在設置文件(setting.py)中必須設置 MEDIA_ROOT作為 Django 存儲上傳文件目錄的完整路徑MEDIA_URL 作為該目錄的基本公共 URL ,確保該目錄能夠被Web服務器的用戶寫入。
  2. 將 FileField 或 ImageField 添加到模型中,定義 upload_to 用於指定 MEDIA_ROOT 要用於上載文件的子目錄選項 。
    例如,假設 MEDIA_ROOT 設置為 ‘/home/media’ ,並且 upload_to 設置為’photos/%Y/%m/%d’。所述’%Y/%m/%d’ 的部分 upload_to 就是 strftime ()格式化; ‘%Y’是四位數的年份,’%m’是兩位數的月份,’%d’是兩位數的日期。如果您在2007年1月15日上傳文件,該文件將保存在目錄中 /home/media/photos/2007/01/15
    FileField實例在資料庫中創建為varchar 列,默認最大長度為100個字符。與其他字段一樣,您可以使用max_length參數更改最大長度。
  3. FieldFile.name : 獲取文件名
    FieldFile.size: 獲取文件大小
    FieldFile.url :用於訪問該文件的url
    FieldFile.open(mode=‘rb’): 以類似Python文件操作的方式,打開文件
    FieldFile.close(): 關閉文件
    FieldFile.save(name, content, save=True): 保存文件
    FieldFile.delete(save=True): 刪除文件
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)

FilePathField 檔案路徑欄位
class FilePathField(path=’’, match=None, recursive=False, allow_files=True, allow_folders=False, max_length=100, options)
path 目錄的絕對路徑 。在Django 3.0中更改為:path 現在允許被調用了。
match 可選參數。作為字符串的正則表達式,FilePathField 將
用於過濾文件名
。請注意,正則表達式將應用於基本文件名,而不是完整路徑。 示例:“foo.*.txt$”,它將匹配名為,foo23.txt 但不匹配bar.txt 或 foo23.png。
recursive:可選參數,默認為False。決定是否包含子目錄。
allow_files:可選參數,默認為True。決定是否應該將文件名包括在內。它和allow_folders其中,必須有一個為True。
allow_folders:可選參數,默認為False。決定是否應該將目錄名包括在內。

FloatField 浮點數欄位(** options)
Python中float表示的浮點數。
此字段的默認表單窗口小部件為NumberInput

ImageField 圖片欄位(upload_to = None,height_field = None,width_field = None,max_length = 100,** options)
需安裝 pillow (terminal, pip install pillow )
height_field 每次保存模型實例時,模型字段的名稱都會自動填充圖像的高度。
width_field 每次保存模型實例時,模型字段的名稱都會自動填充圖像的寬度。
ImageField 實例在資料庫中創建為 varchar 列,默認最大長度為100個字符。與其他字段一樣,您可以使用max_length參數更改最大長度。
此字段的默認表單窗口小部件是 ClearableFileInput。

IntegerField 整數欄位(** options)
一個整數。從-2147483648 ~ 2147483647。它使用MinValueValidator 、 MaxValueValidator 根據默認資料庫支持的值來驗證輸入。
此字段的默認表單窗口小部件為 NumberInput 、TextInput

GenericIPAddressField IP地址欄位(protocol =‘both’,unpack_ipv4 = False,** options)
字符串格式的 IPv4 或 IPv6 地址(例如192.0.2.30或 2a02:42fe::4)。此字段的默認表單窗口小部件是 TextInput。
protocol 將有效輸入限制為指定的協議。可接受的值為’both’(默認值)‘IPv4’ 或’IPv6’。匹配不區分大小寫。
unpack_ipv4 壓縮IPv4映射的地址,例如::ffff:192.0.2.1。如果啟用此選項,則該地址將被解壓縮到 192.0.2.1。默認設置為禁用。僅當protocol設置為時可以使用’both’。如果允許空白值,則必須允許空值,因為空白值存儲為空值。

JSONField (encoder=None, decoder=None, **options) (編碼,解碼) Django 3.1 的新功能
JSON
用於存儲 JSON 編碼數據的字段。在 Python 中,數據以其Python 本機格式表示:字典,列表,字符串,數字,布爾值和 None。
JSONField 支持版本 MariaDB 10.2.7 +,MySQL 5.7.8 +,Oracle,PostgreSQL 和 SQLite 3.9.0+ 。
encoder 編碼器
decoder 解碼器
如果該字段設置default,請確保它是一個不變的對象(例如)str,或者是每次都返回一個 *新的可變對象 *的 可調用對象 (例如 dict 或函數)

PositiveBigIntegerField 大正整數欄位(** options)
Django 3.1 新功能
類似 PositiveIntegerField,但僅允許在特定點(與數據庫有關)下的值。從 0 ~ 9223372036854775807 ,在Django支持的所有數據庫中都是安全的。

PositiveIntegerField 正整數欄位(** options)
類似於 IntegerField ,但必須為 正數(0)。從 0 ~ 2147483647 在Django支持的所有數據庫中都是安全的。0出於向後兼容的原因而接受該值。

PositiveSmallIntegerField 小正整數欄位(** options)
類似於PositiveIntegerField,但僅允許在特定點(與數據庫有關)下的值。從 0 ~ 32767 在Django支持的所有數據庫中都是安全的。

SlugField (max_length = 50,** options)
通常在URL中使用
跟 CharField 一樣,您可以指定 max_length(也請參閱該max_length 部分中有關數據庫可移植性的說明)。如果max_length 未指定,則Django將使用 默認長度 50
根據其他值自動預填充SlugField通常很有用。您可以使用在管理員中自動執行此操作 prepopulated_fields。
它使用validate_slug或 validate_unicode_slug進行驗證。
allow_unicode 如果為 True,則該字段除了接受 ASCII字母外,還接受 Unicode 字母。默認為 False 。

SmallAutoField 小的遞增欄位(** options)
Django 3.0 新功能
類似於AutoField,但僅允許值低於特定(與數據庫有關)的限制。從1 ~ 32767在Django支持的所有數據庫中都是安全的。

SmallIntegerField 小整數欄位(** options)
類似於IntegerField,但僅允許在特定點(與數據庫有關)下的值。從 -32768 ~ 32767 在Django支持的所有數據庫中都是安全的。

TextField 文本欄位(** options)
大文本字段。此字段的默認表單窗口小部件是 Textarea。
如果指定 max_length屬性,它將反映在自動生成的表單字段 Textarea 小部件。

TimeField 時間欄位(auto_now = False,auto_now_add = False,** options)
時間,在Python中以datetime.time實例表示。接受與相同的自動填充選項DateField。
此字段的默認表單窗口小部件是TimeInput。

URLField (max_length = 200,** options)
一個字串欄位的 URL,通過驗證 URLValidator。
此字段的默認表單窗口小部件是URLInput。
像所有 CharField 子類一樣,URLField 採用可選 max_length參數。如果未指定 max_length,則使用默認值200。

UUIDField (** options)
用於存儲通用唯一標識符的字段。
使用Python的 UUID 類。在 PostgreSQL 上使用時,它存儲为uuid資料類型,否則儲存為char(32)。數據庫不會為您生成UUID,因此建議使用default:

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

下篇博客見 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值