这一篇主要是呼应第二篇时留下来的一个问题,就是如何自定义默认app admin下的Form

 1.绑定数据实体

通过第二篇的努力,已经完成了数据实体到数据库的映射,可以将界面的更改保存到数据库,我们建立了实体之后,在polls/admin.py中是这样绑定数据实体的:

from .models import Question

admin.site.register(Question)

但是这样绑定的数据实体在界面可设置的灵活性太小,比如第二篇里面后半截遇到的问题,没有办法指定展示问题的内容:

所以改用模板--创建一个admin model 的class,通过register()第二个重载,将模板类附带的设置参数传入到app Admin 的Form里,修改polls/admin.py如下:

from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text'] #form将包含这两个字段的表单项 admin.site.register(Question, QuestionAdmin)

两个字段,希望在展示的时候,每个字段都有一个标题,标志编辑区域:

from django.contrib import admin
from .models import Question class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}), # none 代表没有标题
('Date information', {'fields': ['question_text','pub_date']}),# Date information 代表着个标题,filds 数组设置这个区域要展示的字段
] admin.site.register(Question, QuestionAdmin)

下来修复列表Question Object(4)这里应该显示question_text才更舒服

class QuestionAdmin(admin.ModelAdmin):

       list_display = ('question_text', 'pub_date', 'was_published_recently')   #列表展示三列

...

接下来改造Choice的Form展示:

from django.contrib import admin

from .models import Choice, Question

class ChoiceInline(admin.StackedInline):
model = Choice #定义Form编辑表单依赖的实体类是Choice
extra = 3 #至少预留三个添加项 class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'pub_date', 'was_published_recently') #列表展示三列
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline] #question 的编辑Form包含Choice的Form admin.site.register(Question, QuestionAdmin)

到这里实体在admin的展示,根据默认样式改造就差不多结束了,但是django怎么做到默认admin App所有的项目共享的?

    2.将admin的默认页面引入项目中

修改firstPro/settings.py 在TEMPLATES中添加 DIRS:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

在templates中新建一个叫admin的文件夹,复制admin/base_site.html到文件夹中,这个文件是django安装路径下的,在django/contrib/admin/templates/下,django的安装路径可以通过下面的命令查看:

>python -c "import django; print(django.__path__)"

我的路径在:C:\Users\RemiH\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\django\contrib\admin\templates\admin,复制完成之后,编辑如下:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('pollswebsite') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">pollswebsite</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}

浏览器刷新http://localhost:8000,本地配置了admin模板,就加载本地,如果本地没有配置,就加在django安装路径下的.

同样可以对默认页,index.html进行个人话改造!

记个问题:

博客代码已经上传至:http://download.csdn.net/download/sql_sbase/10224396

Django App(六) Customing Admin Form的更多相关文章

  1. django 之(六) --- Celery|Admin

    Celery - 分布式任务队列 简介: Celery是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具.这是一个任务队列,着重于实时处理,同时还支持任务调度. ...

  2. Django App(四) Submit a form

    经过前面的努力,到这里我们已经基本完成了,从服务器到浏览器的数据下发,还没有解决从浏览器到服务器的数据上传,这一节将创建一个Form获取从浏览器提交的数据 1.新建Form 接着前面建的项目,网上调查 ...

  3. VS2019 开发Django(六)------Admin中图片上传

    导航:VS2019开发Django系列 该篇继续完善在Django的管理界面上传图片,因为LazyOrders小程序中菜单需要展示图片,而不是一个文本路径,所以我们还需要继续改造一下. 1)安装pil ...

  4. Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)

    编写你的第一个 Django app,第六部分(Page 11)转载请注明链接地址 本教程上接前面第五部分的教程.我们构建了一个经过测试的 web-poll应用,现在我们会添加一个样式表和一张图片. ...

  5. Django App(二) Connect Mysql & defualt App admin

    这一篇接着上一篇polls App自动创建admin app.     1.安装数据库 这里的内容从官网看越看越像 EntityFramework的内容.Python支持SQLite,MySql,Or ...

  6. Python-Django 第一个Django app

    第一个Django app   by:授客 QQ:1033553122 测试环境: Python版本:python-3.4.0.amd64 下载地址:https://www.python.org/do ...

  7. Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第七部分(Page 12)

    编写你的第一个 Django app,第七部分(Page 12)转载请注明链接地址 本节教程承接第六部分(page 11)的教程.我们继续开发 web-poll应用,并专注于自定义django的自动生 ...

  8. 7) 项目准备流程 和 django权限六表

    一.项目准备 1. 创建django项目 2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库 import pymysql pymysql.install_as_ ...

  9. Django基础六之cookie和session

    Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...

随机推荐

  1. java与javax的区别分析(转)

    Java是一种受C语言影响的编程语言.Java和Javax本质上是与Java编程语言的上下文一起使用的包.实际上Java和Javax没有区别.这只是不同的名字. Java是一种编程语言,受到C语言的影 ...

  2. Java的类继承

    知识点1.继承作用:提高代码的重用性,继承之后子类可以继承父类中的属性和方法减少重复代码条件:子类和父类要满足is a的逻辑关系,才能使用继承.如:苹果 is a水果语法:使用extends 连接子类 ...

  3. Bugku-CTF之网站被黑(这个题没技术含量但是实战中经常遇到)

    Day11   网站被黑   http://123.206.87.240:8002/webshell/    

  4. JDK1.7安装和配置及注意事项

    要求 必备知识 windows 7 基本操作. 运行环境 windows 7 下载地址 环境下载 下载JDK 下载地址:http://www.oracle.com/technetwork/java/j ...

  5. Spring错误——Spring AOP——org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

    背景:学习切面,测试前置通知功能,xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  6. JDK的安装与测试

    一,下载并安装JDK1.8版本以上 1.Oracle官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  7. 获取Tomcat更详细的日志

    前言 有时候tomcat报错未详细,未能定位到原因. 解决方法: 获取更详细的日志,以便调试. 详细步骤:   获取详细的日志,方法如下: 在WEB-INF/classes目录下logging.pro ...

  8. 【Luogu P2664】树上游戏

    Problem Description \(lrb\) 有一棵树,树的每个节点有个颜色.给一个长度为 \(n\) 的颜色序列,定义 \(s(i,j)\) 为 \(i\) 到 \(j\) 的颜色数量.以 ...

  9. 【SCOI 2008】奖励关

    Problem Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关. 在这个奖励关里,系统将依次随机抛出 \(k\) 次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之 ...

  10. 正确开启Mockjs的三种姿势:入门参考(一)

    一.文章初衷 阅读本文章需要注意以下几点: 文章不主要介绍Mockjs的使用语法 文章暂不涉及Mockjs的第三方封装框架 文章会结合以往做过上线项目的方式总结 想主要介绍如何使用Mockjs,是因为 ...