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 xxx@mail.com
sun yonggao xxx@mail.com
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.控制使用者 組 許可權
這個直接配置即可。