前言
之前一直在想頁面上如果一個字段只有固定的幾個選項,類似select下拉框這種,如果在表里面設置一個外鍵的話,是不是有點傻了,這樣為了幾個選項弄一張表不值得。
后來看到Django模型中的字段有個choices屬性,在設計模型的時候,只需把字段參數加個choices即可,看樣子是我想多了~
choices參數
如果一個字段設置了choices屬性,在模版中如果我要顯示這個字段,比如用戶的性別,只需設置2個參數選項。
在django模版系統就會將它默認解析為一個下拉菜單,這樣對於一個靜態的下拉菜單式很方便的。
**gender_choices參數定義一個元祖類型,里面有2個參數,一個是value值可以選擇,如“M”,另外一個是顯示的內容display_name,如“男”
# models.py
from django.db import models
# Create your models here.
class Student(models.Model):
'''學生表'''
student_id = models.CharField(max_length=30, verbose_name="學號", default="")
name = models.CharField(max_length=30, verbose_name="姓名", default="")
gender_choices = (
(u'M', u'男'),
(u'F', u'女'),
)
gender = models.CharField(max_length=10,
choices=gender_choices, # 設置性別選項
verbose_name="性別",
default="")
age = models.IntegerField(verbose_name="年齡", default="")
class Meta:
verbose_name = "學生"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
之后執行 makemigrations 和migrate,同步數據
python manage.py makemigrations
python manage.py migrate
添加和查詢數據
進入到django的項目目錄,使用shell模式添加數據,choices字段可以直接添加value參數“M”
>python manage.py shell
>>> from hello.models import Student
>>> st=Student.objects.create(student_id='22001100',name='趙敏',gender='F',age=22)
>>> st.save()
>>> st.gender
'F'
>>> st.get_gender_display()
'女'
>>>
gender字段中保存了兩個信息,一個為value,一個display_name,取value時直接用st.gender即可,如果要取display_name用st.get_gender_display()這個函數即可。
xadmin展示
在xadmin.py注冊表信息,打開后台詳情頁面就可以看到下拉選項了
# adminx.py
import xadmin
from .models import Student
class DisplayStudent(object):
# 顯示的字段
list_display = ('student_id', 'name', 'age',)
xadmin.site.register(Student, DisplayStudent)