最近在更新之前用djang建的網(wǎng)站,淌過了不少坑,在這里記錄下。
第一篇更新,主要關(guān)于django設(shè)置和后臺設(shè)置
新建django項目
命令行中輸入
django-admin startproject test
cd test
進入test目錄,文件結(jié)構(gòu)如下

新建app應(yīng)用
命令行中輸入
python manage.py startapp test1
python manage.py startapp test2
建2個應(yīng)用(對比用),應(yīng)用建立后文件結(jié)構(gòu)如下

settings中設(shè)置
創(chuàng)建應(yīng)用后要將應(yīng)用加入testout/settings.py,讓django知道有這兩個應(yīng)用

settings中這部分可以按需要修改,LANGUAGE_CODE 將后臺語言改成中文簡體,TIME_ZONE 將使用時區(qū)改成東8區(qū)(就是北京時間),如果用不著時區(qū)可以將USE_TZ 設(shè)成False


應(yīng)用中建立模型
test1的models.py文件中建立如下模型
from django.db import models
class Category(models.Model):
name=models.CharField(max_length=100)
def __str__(self):
return self.name
class Tag(models.Model):
name=models.CharField(max_length=100)
class BlogPost(models.Model):
title=models.CharField(max_length=200,verbose_name='標題')
body = models.TextField()
created_time = models.DateTimeField()
category = models.ForeignKey(Category,blank=True)
tag = models.ManyToManyField(Tag,blank=True)
class Meta:
verbose_name='文章'
verbose_name_plural='文章'
test2的models.py中建立如下模型
from django.db import models
class Category(models.Model):
name=models.CharField(max_length=100)
將模型管理加入后臺
在test1中的admin.py將test1中models加入后臺
from django.contrib import admin
from .models import BlogPost,Category,Tag
@admin.register(BlogPost)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'created_time','category',]
list_display_links = ('title', 'category')
search_fields = ('title',)
date_hierarchy = 'created_time'
list_filter = ('category',)
ordering = ('created_time', 'title')
list_per_page = 20
fields = (('title','category'),'body','created_time','tag')
filter_horizontal = ('tag',)
class CatAdmin(admin.ModelAdmin):
list_display = ['name']
admin.site.register(Category,CatAdmin) #效果和上面@admin.register(BlogPost)一樣
admin.site.register(Tag)
在test2中的admin.py將test2中models.py加入后臺
from django.contrib import admin
from .models import Category
admin.site.register(Category)
更改后臺中應(yīng)用顯示名稱
test1中apps.py更改如下
from django.apps import AppConfig
class AdmintestConfig(AppConfig):
name = 'test1'
verbose_name='測試1'
test1中init.py加入以下設(shè)置
default_app_config= 'test1.apps.AdmintestConfig'
設(shè)置效果解釋
進入后臺后顯示

紅色圈出是應(yīng)用名,通過在apps.py中加入verbose_name 改變了后臺顯示應(yīng)用的名稱。
藍色圈出的應(yīng)用中的模型名稱,通過在models.py在定義模型時定義Meta類更改了在后臺顯示的模型的名稱。
class Meta:
verbose_name='文章'
verbose_name_plural='文章'
在<測試1>中的categorys,tags,文章中增加幾個數(shù)據(jù)。
進入<測試1>的categorys,tags,會看下一下對比。

紅色圈出部分,因為category模型中的
def __str__(self):
return self.name
后臺顯示時會顯示category模型的name字段,而tag中是顯示object。
進入<測試1>的文章

在創(chuàng)建模型時有如下設(shè)置
class BlogPost(models.Model):
title=models.CharField(max_length=200,verbose_name='標題')
#將title字段在后臺顯示名稱改為'標題',如藍色圈出位置所示
在將模型加入admins.py時有如下設(shè)置
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'created_time','category',] # 設(shè)置顯示字段,如紅色框中顯示
list_display_links = ('title', 'category') #設(shè)置顯示字段鏈接,如藍色框中顯示
search_fields = ('title',) #設(shè)置可以搜索字段,在位置①
date_hierarchy = 'created_time' #設(shè)置可通過時間篩選,在位置③
list_filter = ('category',) #設(shè)置可用過category字段篩選,在位置②
ordering = ('created_time', 'title') #設(shè)置默認按'created_time', 'title'排序,如箭頭所示
list_per_page = 20 #設(shè)置每頁顯示數(shù)量
進入第一篇文章,

class PostAdmin(admin.ModelAdmin):
fields = (('title','category'),'body','created_time','tag')
#設(shè)置可以在后臺更改的字段,格式為列表或元組,其中的元組中的元組('title','category')可將title和category調(diào)整到同一行,如紅色框所示
filter_horizontal = ('tag',)
# 模型中的manytomanyfield可以設(shè)置filter_horizontal,后臺顯示更友好,如藍色框所示