Django后台通过编辑每个app的admin.py文件实现。
1.新建admin项目
django-admin startproject admin
2.新建app
#进入admin文件夹
cd admin
#创建app:blog
python manage.py startapp blog
将blog加入settings.py文件。
3.新建model
在models.py中,建立Article类
# 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
4.同步数据表
# 进入包含有 manage.py 的文件夹
python manage.py makemigrations
python manage.py migrate
建立了Article的数据表。
创建管理员
python manage.py createsuperuser
5.注册模型
修改admin.py文件
from django.contrib import admin
from .models import Article
admin.site.register(Article)
6.打开服务器
python manage.py runserver
访问 http://localhost:8000/admin/, 输入设定的帐号和密码。可以在后天增加
编辑Article内容。
7.在列表显示相关内容
在admin.py中,修改如下
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)
list_display就是配置要显示的字段的。
显示费字段内容,或字段相关的内容,比如,对于Person类
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)
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)
如果修改了models.py中的字段,就要更改数据表,
python manage.py makemigrations
python manage.py migrate
8.定制搜索功能
在admin.py中修改如下
class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name')
search_fields = ('full_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是搜索关键词
9.其他功能
Django还有很多后台功能,比如
1. 定制加载的列表, 根据不同的人显示不同的内容列表,比如输入员只能看见自己输入的,审核员能看到所有的草稿,这时候就需要重写get_queryset方法
2. 修改保存时的一些操作,可以检查用户,保存的内容等,比如保存时加上添加人
3. 删除时做一些处理
…