Django的MdoelAdmin有一些全局变量,都是非常关键的,其中一个变量就是list_display。它的默认值:('__str__',),也可以是('__unicode__',);从这个可以看出list_display是一个列表,作用是设置admin的change_list页面显示model纪录的字段,所以list的值是model的字段。但在实际的业务流程中是不能够满足要求的,比如显示销售职员的总销量,这个销量数据是在另一个销量model(Sales)里,是需要动态计算而出;像这样的情况,Django给出了一个方法:
-
class XXXAdmin(admin.ModelAdmin) :
-
list_display = ('username','get_user_sales')
-
-
def get_user_sales(self,obj) :
-
numbers = 0
-
for sale in Sales.objects.filter(user=obj) :
-
numbers += sale.number
-
return numbers
-
get_user_sales.short_description = u'累计销量'
其中obj就是当前model的object。
list_display变量还有一个对应方法:get_list_display(self,request),源代码:
-
def get_list_display(self, request):
-
"""
-
Return a sequence containing the fields to be displayed on the
-
changelist.
-
"""
-
return self.list_display
只有一条返回语句,返回全局变量list_display。在其它地方需要使用到这个list_diaplay变量,都是调用这个函数的。为什么不直接调用全局变量呢?会不会是多此一举呢?其实Django给了我们更大的发展空间,试想一下:一个model可能有很多的字段,但不可能全部显示出来,这样页面肯定不好看,而且不同的用户对字段的侧重点是不同的。所以有了get_list_display这个方法就可以实现不同的用户可以显示不同的字段。比如:
-
def get_list_display(self, request):
-
"""
-
Return a sequence containing the fields to be displayed on the
-
changelist.
-
"""
-
if request.user == 'A' :
-
self.list_display = ('AA','AB','AC')
-
else :
-
self.list_display = ('AA','AB')
-
-
return self.list_display
阅读(6512) | 评论(0) | 转发(0) |