zoukankan      html  css  js  c++  java
  • 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)
    

  • 相关阅读:
    2
    作业5
    实验十
    作业 5 指针应用
    九九乘法表
    实验七(课堂练习)
    实验六 数组 (2)
    实验六 数组
    课堂实验5(求从m到n之间(包括m和n)所有素数的和)
    课堂实验5-2
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/10612074.html
Copyright © 2011-2022 走看看