如果直接阅读本文,您可能有些不知所云,这是因为我用很多篇幅讲了一个事情,如果想知道上下文,那么建议您从本专栏第22章看起:Python3开发–22–了解Django框架
一、配置项目应用与模型
因为Admin后台系统是对项目的数据表进行维护和管理,而项目应用commodity和shopper定义了数据模型,因此必须将它们配置到Admin后台系统。
1、修改代码:commodity/__init__.py
from .apps import CommodityConfig
default_app_config = 'commodity.CommodityConfig'
2、修改代码:commodity/apps.py
from django.apps import AppConfig
class CommodityConfig(AppConfig):
name = 'commodity'
verbose_name = '商品管理'
3、修改代码:commodity/admin.py
from django.contrib import admin
from .models import *
# 修改title和header
admin.site.site_title = '母婴后台系统'
admin.site.site_header = '母婴电商后台管理系统'
admin.site.index_title = '母婴平台管理'
@admin.register(Types)
class TypesAdmin(admin.ModelAdmin):
list_display = [x for x in list(Types._meta._forward_fields_map.keys())]
search_fields = ['firsts', 'seconds']
list_filter = ['firsts']
@admin.register(CommodityInfos)
class CommodityInfosAdmin(admin.ModelAdmin):
# 在数据新增页或数据修改页设置可编辑的字段
# fields = ['name','sezes','types','price','discount']
# 在数据新增或修改的页面设置不可编辑的字段
# exclude = []
# 改变数据新增页或数据修改页的网页布局
fieldsets = (
('商品信息', {
'fields': ('name','sezes','types','price','discount')
}),
('收藏数量', {
# 设置隐藏与显示
'classes': ('collapse',),
'fields': ('likes',),
}),
)
# 将下拉框改为单选按钮
# admin.HORIZONTAL是水平排列
# admin.VERTICAL是垂直排列
radio_fields = {'types': admin.HORIZONTAL}
# 在数据新增页或数据修改页设置可读的字段,不可编辑
# readonly_fields = ['sold',]
# 设置排序方式,['id']为升序,降序为['-id']
ordering = ['id']
# 设置数据列表页的每列数据是否可排序显示
sortable_by = ['price', 'discount']
# 在数据列表页设置显示的模型字段
list_display = ['id', 'name', 'sezes', 'types', 'price', 'discount']
# 为数据列表页的字段id和name设置路由地址,该路由地址可进入数据修改页
# list_display_links = ['id', 'name']
# 设置过滤器,若有外键,则应使用双下画线连接两个模型的字段
list_filter = ['types']
# 在数据列表页设置每一页显示的数据量
list_per_page = 100
# 在数据列表页设置每一页显示最大上限的数据量
list_max_show_all = 200
# 为数据列表页的字段name设置编辑状态
list_editable = ['name']
# 设置可搜索的字段
search_fields = ['name', 'types']
# 在数据列表页设置日期选择器
date_hierarchy = 'created'
# 在数据修改页添加“另存为”功能
save_as = True
# 设置“动作”栏的位置
actions_on_top = False
actions_on_bottom = True
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'types':
db_field.choices = [(x['seconds'], x['seconds'])for x in Types.objects.values('seconds')]
return super().formfield_for_dbfield(db_field, **kwargs)
# 数据批量操作
def get_datas(self, request, queryset):
temp = []
for d in queryset:
t=[d.name,d.types,str(d.discount)]
temp.append(t)
f = open('d://data.txt', 'a')
for t in temp:
f.write(','.join(t) + '\r\n')
f.close()
# 设置提示信息
self.message_user(request, '数据导出成功!')
# 设置函数的显示名称
get_datas.short_description = '导出所选数据'
# 添加到“动作”栏
actions = ['get_datas']
4、修改代码:shopper/__init__.py
from .apps import ShopperConfig
default_app_config = 'shopper.ShopperConfig'
5、修改代码:shopper/apps.py
from django.apps import AppConfig
class ShopperConfig(AppConfig):
name = 'shopper'
verbose_name = '订单管理'
6、修改代码:shopper/admin.py
from django.contrib import admin
from .models import *
@admin.register(CartInfos)
class CartInfosAdmin(admin.ModelAdmin):
list_display = ['id', 'quantity']
@admin.register(OrderInfos)
class OrderInfosAdmin(admin.ModelAdmin):
list_display = ['id', 'price', 'created', 'state']
list_filter = ['state']
date_hierarchy = 'created'
二、总结
至此,Django项目就结束了,博主不再向后更新了!
看看本节我们动过哪些代码文件: