2010-08-09 18 views

回答

9

要修改更改列表視圖中的顯示方式和內容,可以使用list_display選項ModelAdmin

請注意,list_display中給出的不是真正的數據庫字段的列不能用於排序,所以需要給Django管理員一個關於哪個數據庫字段實際用於排序的提示。

通過將admin_order_field屬性設置爲用於包裝HTML中某些值的可調用對象來實現此目的。從Django文檔

舉例豐富多彩的領域:

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    color_code = models.CharField(max_length=6) 

    def colored_first_name(self): 
     return '<span style="color: #%s;">%s</span>' % (
          self.color_code, self.first_name) 
    colored_first_name.allow_tags = True 
    colored_first_name.admin_order_field = 'first_name' 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('first_name', 'colored_first_name') 

我希望一些這有助於。

+1

謝謝.allow_tags做了這份工作。 – kelvan 2010-08-11 08:02:04

+0

偉大的答案@rebus。無論如何,將'colored_first_name'函數和attrs綁定到'PersonAdmin'而不是模型?爲模型指定特定於管理員的attrs似乎很奇怪。 – cooncesean 2014-04-29 16:43:03

+1

@cooncesean是的,list_display的值可以是模型或管理類中方法的字符串名稱,也可以是對可調用對象的引用。 [查看文檔以獲取更多示例](https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display) – 2014-04-29 17:00:02

2

此外,還可以使用

colored_first_name.short_description = 'first name' 

一個不錯的列標題

1

這是一個老問題,但由於在接受的答案使用allow_tags屬性是我從文檔添加一個例子Django 1.10因爲Django 1.9過時,建議使用format_html代替:

from django.db import models 
from django.contrib import admin 
from django.utils.html import format_html 

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    color_code = models.CharField(max_length=6) 

    def colored_name(self): 
     return format_html(
      '<span style="color: #{};">{} {}</span>', 
      self.color_code, 
      self.first_name, 
      self.last_name, 
     ) 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('first_name', 'last_name', 'colored_name')