1. 程式人生 > 其它 >choices引數(資料庫欄位設計常見)

choices引數(資料庫欄位設計常見)

choices引數(資料庫欄位設計常見)

當資料可以被列舉完,能夠供使用者選擇的時候,能夠考慮用choices引數,好比性別,成績,學歷,婚否等等

#models.py

from django.db import models


# Create your models here.

class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    # 性別
    gender_choices = (
        (1, '男'),
        (2, '女'),
        (3, '其他'),
    )
    gender = models.IntegerField(choices=gender_choices)
    """
    該gender欄位存的還是數字,但是如果存的數字在上面元組列舉的範圍之內,
    那麼就可以獲取到數字對應的真正內容
    
    1 gender如果欄位存的數字不在上述元組列舉的範圍內容
        
    2 如果在,獲取對應的中文資訊
    """
    score_choices = (
        ('A', '優秀'),
        ('B', '良好'),
        ('C', '及格'),
        ('D', '不合格'),
    )
    # 保證欄位型別跟列舉出來的元組的第一個資料型別一致即可
    score = models.CharField(max_length=32, choices=score_choices, null=True)
#tests.py

from django.test import TestCase

# Create your tests here.
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day08.settings')
    import django
    django.setup()
    from app01 import models
    #存
    # models.User.objects.create(score='A', username='zhao', age=19, gender=1)
    # models.User.objects.create(score='B', username='xiaoyu', age=18, gender=2)
    # models.User.objects.create(score='C', username='張三', age=22, gender=3)
    """存的時候沒有列舉出來的數字也能存"""
    # models.User.objects.create(score='D', username='tony', age=50, gender=4)

    # 取
    user_obj = models.User.objects.filter(pk=1).first()
    print(user_obj.gender)
    # 只要是choices引數欄位,如果想要獲取對應資訊,固定寫法,get_欄位名_display()
    print(user_obj.get_gender_display())
    print(user_obj.get_score_display())
    user_obj2 = models.User.objects.filter(pk=4).first()
    # 如果沒有對應關係,那麼欄位是什麼就展示什麼
    print(user_obj2.score)
    print(user_obj2.get_gender_display())
    print(user_obj2.get_score_display())



if __name__ == '__main__':
    main()