Django之模型(model)中的choices字段的使用(转发)

Django模型中的字段有个choices属性,这个属性可以提供被选数据。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下来菜单,这样对于一个静态的下拉菜单式很方便的,下来我们看下django官方文档中对这个属性使用的介绍。

我们这儿有个例子,我们先定义一个模型,名字为Person ,这个Person 包含了名字和性别两个字段,代码如下:

1
2
3
4
5
6
7
8
from  django.db  import  models
class  Person(models.Model):
     GENDER_CHOICES  =  (
         (u 'M' , u 'Male' ),
         (u 'F' , u 'Female' ),
     )
     name  =  models.CharField(max_length = 60 )
     gender  =  models.CharField(max_length = 2 , choices = GENDER_CHOICES)

接下来我们看下在程序中如何取到带choices属性的gender字段的值。

1
2
3
4
5
6
>>> p  =  Person(name = "Fred Flinstone" , gender = "M" )
>>> p.save()
>>> p.gender
u 'M'
>>> p.get_gender_display()
u 'Male'

可见gender字段中保存了两个信息,一个为value,一个display_name,我要取value时直接用p.gender即可,如果要取

display_name时用p.get_gender_display()这个函数即可。

接下来看看这个Person如何在界面上显示呢?首先需要定义一个继承自模型Person的Form,代码如下:

1
2
3
4
5
6
from  django  import  forms
class  PersonForm(forms.ModelForm):
     class  Meta:
         model  =  Person
#实例化一个PersonForm然后传给模版
pf  =  PersonForm()

此时在模版中用{{pf.gender}}即可显示一个下拉菜单,的确方便了开发。如果我想在界面上显示display_name,直接使用{{p.get_gender_display}}就不行,可是在实际的开发中的确有这样的需求,此时我们就想到了自定义过滤器,代码如下:

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

这样我们用{{p|displayName:'gender'}}即可显示出display_name了。这个需求常出现在人员列表的场景中。

原文地址http://quke.org/post/django-model-choices.html

Django模型中的字段有个choices属性,这个属性可以提供被选数据。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下来菜单,这样对于一个静态的下拉菜单式很方便的,下来我们看下django官方文档中对这个属性使用的介绍。

我们这儿有个例子,我们先定义一个模型,名字为Person ,这个Person 包含了名字和性别两个字段,代码如下:

1
2
3
4
5
6
7
8
from  django.db  import  models
class  Person(models.Model):
     GENDER_CHOICES  =  (
         (u 'M' , u 'Male' ),
         (u 'F' , u 'Female' ),
     )
     name  =  models.CharField(max_length = 60 )
     gender  =  models.CharField(max_length = 2 , choices = GENDER_CHOICES)

接下来我们看下在程序中如何取到带choices属性的gender字段的值。

1
2
3
4
5
6
>>> p  =  Person(name = "Fred Flinstone" , gender = "M" )
>>> p.save()
>>> p.gender
u 'M'
>>> p.get_gender_display()
u 'Male'

可见gender字段中保存了两个信息,一个为value,一个display_name,我要取value时直接用p.gender即可,如果要取

display_name时用p.get_gender_display()这个函数即可。

接下来看看这个Person如何在界面上显示呢?首先需要定义一个继承自模型Person的Form,代码如下:

1
2
3
4
5
6
from  django  import  forms
class  PersonForm(forms.ModelForm):
     class  Meta:
         model  =  Person
#实例化一个PersonForm然后传给模版
pf  =  PersonForm()

此时在模版中用{{pf.gender}}即可显示一个下拉菜单,的确方便了开发。如果我想在界面上显示display_name,直接使用{{p.get_gender_display}}就不行,可是在实际的开发中的确有这样的需求,此时我们就想到了自定义过滤器,代码如下:

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

这样我们用{{p|displayName:'gender'}}即可显示出display_name了。这个需求常出现在人员列表的场景中。

猜你喜欢

转载自www.cnblogs.com/zhuzhiwei-2019/p/10854116.html
今日推荐