Django admin 設置和定制
阿新 • • 發佈:2018-02-27
filter unicode mod desc mef nbsp cls rfi 繼承
models 在 models.py 中定義,每個 model 是一個 class:
from django.db import models class PerformanceData(models.Model): name = models.CharField(‘name‘, max_length=200, unique=True)
date = models.DateTimeField(‘date‘)
自定義 object 的顯示
def __unicode__(self): # 如果是 python3 使用 __str__ return u‘%s %s‘ % (self.name, self.date)
在 admin.py 中定義 PerformanceDataAdmin 繼承 admin.ModelAdmin, 進一步對 model 進行設置:
class PerformanceDataAdmin(admin.ModelAdmin): list_display=(‘name‘, ‘date‘) # 顯示表格的表頭 list_per_page = 50 # 每頁顯示 50 條記錄 ordering = (‘-name‘,) # 用 name 屬性排序, ‘-‘ 表示倒序排列 list_filter=(‘name‘, ‘date‘) # 設置過濾器 search_fields =(‘name‘, ‘date‘) # 設置搜索框中允許搜索的字段
actions = [add_one_copy,] # 添加一個 action, 需要定義函數 add_one_copy admin.site.site_header = ‘Test Management‘ # 設置標題 admin.site.site_title = ‘Test Management‘ # 設置標題 admin.site.register(PerformanceData, PerformanceDataAdmin) # 註冊
設置字段顏色,在 models.py 中定義新的字段如下:
from django.db import models from django.utils.html import format_html class PerformanceData(models.Model): name = models.CharField(‘name‘, max_length=200, unique=True) date = models.DateTimeField(‘date‘) def colored_name(self): if self.name == ‘1‘: color_code = ‘green‘ else: color_code = ‘red‘ return format_html( ‘<span style="color: #{};">{}</span>‘, color_code, self.name, )
在 admin.py 中需要改為
list_display=(‘colored_name‘, ‘date‘) # 顯示表格的表頭
更改表頭的顯示文字
colored_name.short_description = ‘MY_NAME‘
註意,要先為字段在 models.py 中定義一個類似 colored_name 的方法,並設置 short_description,然後在 admin.py 的 list_display 中使用這個新的方法定義。例如:
class PerformanceData(models.Model): name = models.CharField(‘name‘, max_length=200, unique=True) date = models.DateTimeField(‘date‘) def short_date(self): return self.date
short_date.short_description = ‘MY_DATE‘
list_display=(‘colored_name‘, ‘short_date‘) # 顯示表格的表頭
為表格添加 actions
def add_one_copy(modelAdmin, request, queryset): add_one_copy.short_description = ‘Select and add one copy‘ for i in queryset: print(i.date) class PerformanceDataAdmin(admin.ModelAdmin): actions = [add_one_copy,] # 添加一個 action, 需要定義函數 add_one_copy
為 model 添加 create 函數,可以調用這個函數增加新的條目
from django.db import models from datetime import * class PerformanceData(models.Model): name = models.CharField(‘name‘, max_length=200, unique=True) date = models.DateTimeField(‘date‘) @classmethod def create(cls, _name, _date): obj = cls(name=_name, date=_date) return obj obj = PerformanceData.create(‘hello‘, datetime(1980,10,11)) obj.save()
Django admin 設置和定制