以前一直在想頁面上若是一個字段只有固定的幾個選項,相似select下拉框這種,若是在表裏面設置一個外鍵的話,是否是有點傻了,這樣爲了幾個選項弄一張表不值得。
後來看到Django模型中的字段有個choices屬性,在設計模型的時候,只需把字段參數加個choices便可,看樣子是我想多了~python
若是一個字段設置了choices屬性,在模版中若是我要顯示這個字段,好比用戶的性別,只需設置2個參數選項。
在django模版系統就會將它默認解析爲一個下拉菜單,這樣對於一個靜態的下拉菜單式很方便的。
**gender_choices參數定義一個元祖類型,裏面有2個參數,一個是value值能夠選擇,如「M」,另一個是顯示的內容display_name,如「男」shell
# 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,同步數據django
python manage.py makemigrations
python manage.py migrateruby
進入到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()這個函數便可。
spa
在xadmin.py註冊表信息,打開後臺詳情頁面就能夠看到下拉選項了設計
# adminx.py import xadmin from .models import Student class DisplayStudent(object): # 顯示的字段 list_display = ('student_id', 'name', 'age',) xadmin.site.register(Student, DisplayStudent)