ORM(四)字段參數
null:如果null=True,則該字段在數據庫中的值可以為NULL,默認null=False。
blank:如果blank=True,前端form表單可以空,註意,這與NULL不同。NULL純粹與數據庫相關,而空值則與驗證相關。如果字段為blank=True,則表單驗證將允許輸入空值。如果字段為blank=False,則該字段必須填寫。
db_column:用於此字段的數據庫列的名稱。如果沒有給出,Django將使用字段的名稱。
db_index:如果db_index=True,則允許創建該字段為索引。
default:為字段設置默認值。
primary_key:primary_key=True將該字段設為主鍵。
unique:unique=True設置該字段值在表中是唯一的,不能重復。
unique_for_date:將該字段日期(DateField、DateTimeField)設置為唯一不能重復。
unique_for_year:將該字段年份(DateField、DateTimeField)設置為唯一不能重復。
unique_for_moth:將該字段月份(DateField、DateTimeField)設置為唯一不能重復。
choices:顯示選擇框的內容,如:sex = models.IntegerField(choices=[(0, ‘女‘),(1, ‘男‘),],default=1),如果我們使用"對象.sex"的方式將只能獲取0或者是1,而不能獲取男或者女。可以使用“對象.get_sex_display”的方式來獲取選項中的男或女。如下示例:
from django.db import models class Person(models.Model): SHIRT_SIZES = ( # 定義choices的選項 (‘S‘, ‘Small‘), (‘M‘, ‘Medium‘), (‘L‘, ‘Large‘), ) name = models.CharField(max_length=60) shirt_size = models.CharField(max_length=1,choices=SHIRT_SIZES)>>>from 項目_app.models import Person # 在終端中導入模塊 >>> p = Person(name="Fred Flintstone", shirt_size="L") >>> p.save() >>> p.shirt_size # 直接打印字段 ‘L‘ >>> p.get_shirt_size_display() # 使用對象.get_字段_display()的方式打印字段 ‘Large‘
error_messages:自定義錯誤信息(字典類型),從而定制想要顯示的錯誤信息;字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{‘null‘: "不能為空.", ‘invalid‘: ‘格式錯誤‘}
參考網址:https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-options
ForeignKey(ForeignObject)
參數:ForeignObject(RelatedField)
to=表名, # 要進行關聯的表名
to_field=None, # 要關聯的表中的字段名稱
on_delete=None, # 當刪除關聯表中的數據時,當前表與其關聯的行的行為
- models.CASCADE,刪除關聯數據,與之關聯也刪除
- models.DO_NOTHING,刪除關聯數據,引發錯誤IntegrityError
- models.PROTECT,刪除關聯數據,引發錯誤ProtectedError
- models.SET_NULL,刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空)
- models.SET_DEFAULT,刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值)
- models.SET,刪除關聯數據,
a. 與之關聯的值設置為指定值,設置:models.SET(值)
b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象)
def get_sentinel_user(): return get_user_model().objects.get_or_create(username=‘deleted‘)[0] class MyModel(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), # 調用函數get_sentinel_user() )
------------------------------------未完
ORM(四)字段參數