Django admin参数配置
admin参数配置
admin 启动
admin: Django的后台数据管理的web版本
针对Food表,url:
http://127.0.0.1:8000/admin/app02/food/ # 查询页面
http://127.0.0.1:8000/admin/app02/food/add/ # 增加页面
http://127.0.0.1:8000/admin/app02/food/1/change/ # 修改页面
http://127.0.0.1:8000/admin/app02/food/2/delete/ # 删除页面
加载setting中install_app
1 from django.contrib import admin 2 autodiscover_modules('admin')
注册
在app01文件夹下的admin.py中注册models中的类
1 class BookConfig(admin.ModelAdmin): 2 list_display = ['title', 'price', 'publishDate', 'publish'] # list_display中的字段不能是ManyToManyField。列表中写的都是字段字符串。
设置指定的字段可以点击跳转,默认左侧第一列,可以设置多个字段。list_display_links必须在list_display的后边,不然就会报错。显示查找不到list_display_links中括号中的字段名。
list_display_links = ['price', 'title'] # 设置指定的字段可以点击跳转,默认左侧第一列,可以设置多个字段。列表中写的都是字段字符串。
字面上看就可以发现红色框中的字体与右侧两列的不同。
过滤器
1 list_filter = ['title', 'publish', 'authors'] # 过滤器的过滤条件,列表中写的都是字段字符串。
增加搜索框
列表内的字段为搜索框中输入内容查找时的匹配数据集合,查找时采用模糊匹配,将查到的结果全部显示出来。
search_fields = ['title', 'price'] # 增加搜索框,列表内的字段为搜索框中输入内容查找时的匹配数据集合。列表中写的都是字段字符串。
实际注册的语句,括号中第一个参数填写model中的类名,第二个写的是admin.py中的单独设置的类名。
1 admin.site.register(Book, BookConfig) # 实际注册的语句,括号中以一个参数填写model中的类名,第二个写的是admin.py中的单独设置类名。
当没有设置单独的类名时:
1 admin.site.register(Food) # 只写一个models中的类名即可。
源码如下:
def register(self, model_or_iterable, admin_class=None, **options):
由源码可以看出,当第二个参数没有参数传入时,默认使用None。
批量操作
1 def patch_init(self, request, queryset): 2 queryset.update(price=0) 3 patch_init.short_description = '价格初始化'
4 actions = [patch_init] # 将上边设置的批量操作添加到下拉菜单中
queryset为选中的数据集合。
结果如下:
在批量操作下拉菜单中多出一个设置的选项,使用此选项可以进行批量操作。
源码中实现的顺序
源码::django.contrib.admin.sites模块
1 class AdminSite(object): 2 3 def __init__(self): 4 self._registry = {} 5 6 def register(self, model, admin_class = None): 7 # 设置配置类 8 if not admin_class: 9 admin_class = ModelAdmin 10 11 self._registry[model] = admin_class(model, self) 12 13 site = AdminSite()
加载每一个app下的admin.py文件:
1 from django.contrib import admin 2 admin.site.register(Book, BookConfig) 3 admin.site.register(Publish)
设计url
知识点
url(r'index/', views.index) # index不能带括号
url方法的分发
分发
(二级分发)
1 url(r'test/',([ 2 url(r'yuan/',([ 3 url(r'aaa/', aaa), 4 url(r'bbb/', bbb), 5 url(r'ccc/', ccc), 6 ],None, None)), # 第一个None是app名字,第二个None是名称空间名字,列表中放url。 7 8 url(r'alex', alex), 9 ], None, None))
针对Food表,url:
http://127.0.0.1:8000/admin/app02/food/
http://127.0.0.1:8000/admin/app02/food/add/
http://127.0.0.1:8000/admin/app02/food/1/change/
http://127.0.0.1:8000/admin/app02/food/2/delete/
1 model._meta.model_name: # 模型表的名称 2 model._meta.app_label: # 模型表所在的app的名称
config_obj:某个model的配置类(自定义配置类或者默认配置类)对象
仿照admin实现一个自定义的增删改查的组件
(1) 启动
1 class StarkConfig(AppConfig): 2 3 name = 'stark' 4 5 def ready(self): 6 autodiscover_modules('stark')
(2) 注册
待续...
Django基础内容
Django创建app命名
1 python manage.py startapp app01
startapp app名字
admin汉化
settings.py文件的:
LANGUAGE_CODE 设置为 ZH-hans。
Django将各个模块放在不同的py文件中只是为了解耦。将所有的文件放在同一个py文件中也是完全可以的。