python測試開發django-40.模型(model)中choices使用


前言

之前一直在想頁面上如果一個字段只有固定的幾個選項,類似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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM