Django - Admin
1. 后台注册
每个 app 下都有一个 admin.py 文件,打开文件将你要添加的modules中的一个类注册到admin
from django.contrib import admin
from .models import Article
admin.site.register(Article)
在后台添加两条记录,默认看到的两条记录的名字是一样的,这样我们必须点进去才知道两个的区别,这个需要修改modules来处理:
# coding:utf-8
from django.db import models
class Article(models.Model):
title = models.CharField(u'标题', max_length=256)
content = models.TextField(u'内容')
pub_date = models.DateTimeField(u'发表时间', auto_now_add=True, editable = True)
update_time = models.DateTimeField(u'更新时间',auto_now=True, null=True)
def __unicode__(self):# 在Python3中用 __str__ 代替 __unicode__
return self.title
# 处理 python2.X和python3.X的兼容问题
# coding:utf-8
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model):
title = models.CharField('标题', max_length=256)
content = models.TextField('内容')
pub_date = models.DateTimeField('发表时间', auto_now_add=True, editable = True)
update_time = models.DateTimeField('更新时间',auto_now=True, null=True)
def __str__(self):
return self.title
2. 在列表显示中添加与字段相关的其它内容
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','update_time',)
admin.site.register(Article,ArticleAdmin)
3. 在列表现实中添加与字段无关的其它内容
# modules.py
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def my_property(self):
return self.first_name + ' ' + self.last_name
my_property.short_description = "Full name of the person"
full_name = property(my_property)
# admin.py
from django.contrib import admin
from .models import Article, Person
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date', 'update_time',)
class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name',)
admin.site.register(Article, ArticleAdmin)
admin.site.register(Person, PersonAdmin)
4. 一些常用功能
4.1 搜索功能
search_fields = ('title', 'content',)
4.2 筛选功能
list_filter = ('status',) # 根据文章的状态筛选
一些简单的使用例子:
# 定制加载的列表, 根据不同的人显示不同的内容列表,比如输入员只能看见自己输入的,审核员能看到所有的草稿,这时候就需要重写get_queryset方法
class MyModelAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(MyModelAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(author=request.user)
# 该类实现的功能是如果是超级管理员就列出所有的,如果不是,就仅列出访问者自己相关的
# 定制搜索功能(django 1.6及以上才有)
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'age')
search_fields = ('name',)
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
try:
search_term_as_int = int(search_term)
queryset |= self.model.objects.filter(age=search_term_as_int)
except:
pass
return queryset, use_distinct
# queryset 是默认的结果,search_term 是在后台搜索的关键词
# 修改保存时的一些操作,可以检查用户,保存的内容等,比如保存时加上添加人
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()