1.Using the Admin site
admin模块在django.contrib中,所以添加admin管理时需要在ulrs中去掉以下两行注释;
from django.contrib import admin
admin.autodiscover()
2.setting设置
1)在INSTALLED_APPS中添加django.contrib.admin
小技巧:INTALLED_APPS最好以alphabetical排列,这样比较容易阅读。
2)确保以下三个app被安装
django.contrib.sessions
django.contrib.contenttypes
django.contrib.auth
3)MIDDLEWARE_CLASSES打开
django.middleware.common.CommonMiddleware
django.contrib.sessions.middleware.SessionMiddleware
django.contrib.auth.middleware.AuthenticationMiddleware
4)安装admin数据库
如果以上几点是新添加的,那么需要添加amdin管理用数据库。
python manage.py syncdb
5)createsuperuser
如果在安装数据库时没有创建superuser,则可以用以下命令创建
python manage.py createsuperuser
3.Adding your models to the Admin site
在books app目录下创建admin.py文件,注意这个文件名只能叫admin.py不能是别的。
因为在django家在urls.py时会执行admin.autodiscover()函数,该函数从INSTALLED_APPS
中查找app,并在对应的app下查找amdin.py文件名。执行admin.py的内容。
e.g.
from django.contrib import admin
from website.books import models
admin.site.register(models.Publisher)
admin.site.register(models.Author)
admin.site.register(models.Book)
4.修改admin可编辑属性
admin会根据在创建数据库时的非空与否属性来确定字段是否必填。
默认的字段都是必须填的,如果可以为空可以自己添加属性。e.g.
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True)
注意:对于时间和数字,允许为空的条件需要blank=True,null=True,否则会引发错误。
models.DateField(blank=True, null=True)
这里blank=True没有改变数据库属性,但是null=True却改变了数据库的属性,所以
在添加null=True后需要更改数据库,这个在上一节已经描述过了,需要用数据库命令来修改。
5.Customizing field labels
默认情况下,数据库的field名字在admin中显示的是数据库定义时的名字,例如上面例子中first_name
显示的就是first_name,这个可以修改在数据库中显示的名字(label),例如:
class Author(models.Model):
first_name = models.CharField(max_length=30,verbose_name="姓名")
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True)
def __unicode__(self):
return self.last_name
6.Customizing ModelAdmin class
1)默认情况下amdin中显示某个表中的内容是__unicode__函数中定义的内容。例如上面的例子
Author表中在admin中只会显示last_name列内容。
类似下面的表示:
Author #表名
xiuqi #作者的last_name
yogngao
2)显然这个样子是很难看的,我们可以完全定制显示形式包括5中提到的修改label名。
修改后的例子:
#admin.py
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book)
#models.py
class Author(models.Model):
first_name = models.CharField(max_length=30,verbose_name="姓名")
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True)
这样修改后的表示形式为:
姓名 last_name email
zhang san [email protected]
sun yonggao [email protected]
3)其他定制项目
search_fields = ('first_name', 'last_name')
list_filter = ('first_name',)
date_hierarchy = ('first_name')
ordering = ('-first_name',)
fields = ('last_name', 'first_name', 'email', )#定制列的先后顺序
#利用fields属性同样可以起到控制可编辑域作用,即不想被编辑的域直接就
#可以不列出来。
7.控制用户 组 权限
这个直接配置即可。