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()
本文来自博客园,作者:ExpiredSaury,转载请注明原文链接:https://www.cnblogs.com/saury/p/16976294.html