zoukankan      html  css  js  c++  java
  • Django模型中字段属性choice的使用

    根据Django官方文档:

     1 from django.db import models
     2 
     3 class Student(models.Model):
     4     FRESHMAN = 'FR'
     5     SOPHOMORE = 'SO'
     6     JUNIOR = 'JR'
     7     SENIOR = 'SR'
     8     YEAR_IN_SCHOOL_CHOICES = (
     9         (FRESHMAN, 'Freshman'),
    10         (SOPHOMORE, 'Sophomore'),
    11         (JUNIOR, 'Junior'),
    12         (SENIOR, 'Senior'),
    13     )
    14     year_in_school = models.CharField(
    15         max_length=2,
    16         choices=YEAR_IN_SCHOOL_CHOICES,  # choices中传入YEAR_SCHOOL_CHOICES的元组内容
    17         default=FRESHMAN,
    18     )
    19 
    20     def is_upperclass(self):
    21         return self.year_in_school in (self.JUNIOR, self.SENIOR)

    choices接收一个元组(保证值不可变),每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。同理每一个选项也是由一个元组(value,display_name)构成。显而易见,display_name就是要在页面中展示的。

    如何取到value和displayname?

    比如说实例一个User对象user,则如示user.sex = value,user.get_sex_display() = display_name,通过属性取value,通过 get_属性_display()方法取display_name。

    在模板中可以通过模板语言 {{ user.sex }}很简单地显示value,但不能直接调用 get_属性_display()方法(模板毕竟是模板语言)

    只能自定义过滤器,顺便提一句django中是不能直接调用函数的,可以通过自定义filter来实现(template_filters.py)

    1 @register.filter(name='displayName')
    2 def displayName(value, arg):
    3     return eval('value.get_'+arg+'_display()')

    模板中使用{{ user|displayName:'sex'}} 就OK(user是传入的变量)。

  • 相关阅读:
    基于OWin的Web服务器Katana发布版本3
    如何在.NET上处理二维码
    .NET开源OpenID和OAuth解决方案Thinktecture IdentityServer
    ASP.NET Identity V2
    Azure Redis Cache
    CentOS 7 安装RabbitMQ 3.3
    ASP.Net MVC 5 in Xamarin Studio 5.2
    Centos 7.0 安装Mono 3.4 和 Jexus 5.6
    CentOS下GPT分区(转)
    CentOS下使用LVM进行分区(转)
  • 原文地址:https://www.cnblogs.com/cpl9412290130/p/9811813.html
Copyright © 2011-2022 走看看