02.Django后台和数据库的设计

来源:互联网 发布:ntp网络时间服务器 编辑:程序博客网 时间:2024/06/04 01:00
继上一篇中数据库的连接

一:Admin的工作方式
    

当服务启动时,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管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)


二:构建简单的Admin

修改blog中的models.py
#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"

修改blog目录下的admin.py
from django.contrib import admin
from blog.models import Blog
# Register your models here.

admin.site.register(Blog)

同步数据库(首先要删除原先数据库中的User表,否则会报错)manage.py syncdb

创建超级用户:
    manage.py cteatesuperuser

浏览器访问:
    127.0.0.1:8000/admin
    输入刚才创建的账号和密码

三:模块级别的修改

设置字段可选
    name = models.CharField(max_length = 20, **blank = True**)
设置日期和数字型字段可选

    SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的    含义。

    在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。

    为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL
自定义字段标签
    name = models.CharField(max_length = 20, **blank = True**,verbose_name="AAA")

四:自定义ModelAdmin类
#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')
#快速查询栏
search_fields = ('author','time','tag',)
#多对多字段使用filter_hierarchy,不能用于 ForeignKey字段
filter_hierarchy = ('authors',)

# #用BlogAdmin来注册Blog
admin.site.register(Blog, BlogAdmin)
    
    
0 0
原创粉丝点击