Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21430
  • 博文数量: 4
  • 博客积分: 31
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 11:00
文章分类

全部博文(4)

文章存档

2015年(4)

我的朋友

分类: Python/Ruby

2015-11-09 10:34:45

       Django的MdoelAdmin有一些全局变量,都是非常关键的,其中一个变量就是list_display。它的默认值:('__str__',),也可以是('__unicode__',);从这个可以看出list_display是一个列表,作用是设置admin的change_list页面显示model纪录的字段,所以list的值是model的字段。但在实际的业务流程中是不能够满足要求的,比如显示销售职员的总销量,这个销量数据是在另一个销量model(Sales)里,是需要动态计算而出;像这样的情况,Django给出了一个方法:

点击(此处)折叠或打开

  1. class XXXAdmin(admin.ModelAdmin) :
  2.     list_display = ('username','get_user_sales')

  3.     def get_user_sales(self,obj) :
  4.         numbers = 0
  5.         for sale in  Sales.objects.filter(user=obj) :
  6.             numbers += sale.number
  7.         return numbers
  8.     get_user_sales.short_description = u'累计销量'
其中obj就是当前model的object。         
        list_display变量还有一个对应方法:get_list_display(self,request),源代码:

点击(此处)折叠或打开

  1. def get_list_display(self, request):
  2.         """
  3.         Return a sequence containing the fields to be displayed on the
  4.         changelist.
  5.         """
  6.         return self.list_display
只有一条返回语句,返回全局变量list_display。在其它地方需要使用到这个list_diaplay变量,都是调用这个函数的。为什么不直接调用全局变量呢?会不会是多此一举呢?其实Django给了我们更大的发展空间,试想一下:一个model可能有很多的字段,但不可能全部显示出来,这样页面肯定不好看,而且不同的用户对字段的侧重点是不同的。所以有了get_list_display这个方法就可以实现不同的用户可以显示不同的字段。比如:

点击(此处)折叠或打开

  1. def get_list_display(self, request):
  2.         """
  3.         Return a sequence containing the fields to be displayed on the
  4.         changelist.
  5.         """
  6.         if request.user == 'A' :
  7.             self.list_display = ('AA','AB','AC')
  8.         else :
  9.             self.list_display = ('AA','AB')

  10.         return self.list_display
阅读(6437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~