Django admin 設置和定製

models 在 models.py 中定義,每一個 model 是一個 class:html

from django.db import models
class PerformanceData(models.Model):
    name = models.CharField('name', max_length=200, unique=True)
date = models.DateTimeField('date')

自定義 object 的顯示python

def __unicode__(self): # 若是是 python3 使用 __str__
    return u'%s %s' % (self.name, self.date)

在 admin.py 中定義 PerformanceDataAdmin 繼承 admin.ModelAdmin, 進一步對 model 進行設置:django

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 中須要改成spa

list_display=('colored_name', 'date') # 顯示錶格的表頭

更改表頭的顯示文字code

colored_name.short_description = 'MY_NAME'

注意,要先爲字段在 models.py 中定義一個相似 colored_name 的方法,並設置 short_description,而後在 admin.py 的 list_display 中使用這個新的方法定義。例如:orm

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') # 顯示錶格的表頭

爲表格添加 actionshtm

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 函數,能夠調用這個函數增長新的條目blog

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()
相關文章
相關標籤/搜索