Django | ORM choices引數詳解
阿新 • • 發佈:2022-03-04
choices引數(資料庫欄位設計)
# 在資料庫欄位設計階段,只要某個欄位的可能性是可以列舉完全的,那麼一般情況下都會採用choices引數
# 什麼是可以列舉完全的呢?
答 :就是一個數據的結果就是定數,
比如:資料的結果為性別(男/女)
資料的結果為學歷(小學,高中,大學,研究生,博士,等等)
資料的結果為是否結婚(已婚/未婚).....
# 像這樣的資料,都是可以列舉完全的,那麼這種資料欄位,一般採用choices引數
Django模型中的欄位有個choices屬性,這個屬性可以提供被選資料,choices的引數是一個元組,它裡面也是元組構成,第一個引數是choices的可選引數,第二個是對這個引數的說明。如果一個欄位設定了這個屬性,在模版中如果我要顯示這個欄位,那麼django模版系統就會將它預設解析為一個下拉選單,這樣對於一個靜態的下拉選單式很方便的.下面我們來看對這個引數的具體使用
示例演示:
class User(models.Model): username = models.CharField(max_length=32) age = models.IntegerField() gender_choices = ( (1,'男'), # 使用int型別 (2,'女'), (3,'其他') ) # 先列舉所有的對應關係,元組的形式,第一個引數相當於變數名,第二個引數相當於變數值,可通過變數名找到對應的變數值。 gender = models.IntegerField(choices=gender_choices) # 元組內第一個元組的第一個元素是什麼型別這裡就要定義什麼型別,括號內填寫choices引數,引數的值為定義好的對應關係 """ 該gender欄位存的還是數字 但是如果存的數字在上面元祖列舉的範圍之內 那麼可以非常輕鬆的獲取到數字對應的真正的內容 """ score_choices = ( ('A','優秀'), # 使用字元型別 ('B','良好'), ('C','及格'), ('D','差') ) score = models.CharField(max_length=32,choices=score_choices)
研究:
1.gender欄位存的數字不在上述元祖列舉的範圍內容
2.如果在 如何獲取對應的中文資訊
# 存 models.User.objects.create(username='jack',age=19,gender=1,score='A') models.User.objects.create(username='tom',age=20,gender=2,score='B') models.User.objects.create(username='kevin',age=31,gender=3,score='C') # 驗證沒有建立對應關係的值是否可以儲存進出 models.User.objects.create(username='gary',age=25,gender=4,score='D') models.User.objects.create(username='gary',age=25,gender=5,score='E') # 取: user_obj = models.User.objects.filter(pk=1).first() print(user_obj.gender) print(user_obj.get_gender_display()) # # 只要是choices引數的欄位 如果你想要獲取對應資訊 固定寫法 get_欄位名_display() res = models.User.objects.filter(pk=4).first() print(res.gender) print(res.get_gender_display()) # 如果沒有對應關係 那麼欄位是什麼還是展示什麼 res1 = models.User.objects.filter(pk=5).first() print(res1.score) print(res1.get_score_display()) # 如果沒有對應關係 那麼欄位是什麼還是展示什麼