当服务启动时,Django从`` url.py`` 引导URLconf,然后执行`` admin.autodiscover()`` 语句。 这个函数遍历INSTALLED_APPS
配置,并且寻找相关的 admin.py
文件。 如果在指定的app目录下找到admin.py
,它就执行其中的代码。
在`` books`` 应用程序目录下的`` admin.py`` 文件中,每次调用`` admin.site.register()`` 都将那个模块注册到管理工具中。 管理工具只为那些明确注册了的模块显示一个编辑/修改的界面。
应用程序`` django.contrib.auth`` 包含自身的`` admin.py`` ,所以Users和Groups能在管理工具中自动显示。 其它的django.contrib
应用程序,如django.contrib.redirects
,其它从网上下在的第三方Django应用程序一样,都会自行添加到管理工具。
综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。 你可以在Django基本代码中的django/contrib/admin
目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。 (如果你确实想浏览Django管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)
#coding:utf-8
from django.db import models
# Create your models here
class Blog(models.Model):
title = models.CharField(max_length=20) #文章标题
author = models.CharField(max_length=15) #作者
time = models.TimeField() #时间
tag = models.CommaSeparatedIntegerField() #文章标签
content = models.TextField() #内容
def __unicode__(self): #后台中显示的标题
return self.title
class Meta: #自定义数据表名字
db_table = "Blog"
from django.contrib import admin
from blog.models import Blog
# Register your models here.
admin.site.register(Blog)
SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的 含义。
在SQL中, NULL
的值不同于空字符串,就像Python中None
不同于空字符串(""
)一样。这意味着某个字符型字段(如VARCHAR
)的值不可能同时包含NULL
和空字符串。
CREATE TABLE
语句自动为每个字段显式加上
NOT NULL
#coding:utf-8
from django.contrib import admin
from blog.models import Blog
# Register your models here.
class BlogAdmin(admin.ModelAdmin):
#自定义列表
list_display = ('title','time','tag','author','content')
#添加过滤段
list_filter = ('time','author')
#自定义过滤菜单,排除一些不想被他人编辑的菜单
fields = ('title','time','tag','author','content')
#快速查询栏#多对多字段使用filter_hierarchy,不能用于 ForeignKey字段
search_fields = ('author','time','tag',)
filter_hierarchy = ( 'authors' ,)
# #用BlogAdmin来注册Blog
admin.site.register(Blog , BlogAdmin)