django 后台日期_Python之Django系列-创建第一个应用-9

上一篇:Python之Django系列-创建第一个应用-8

这一篇我们主要会讲到投票应用后台表单,之前我们的后台表单很简单,现在我们来丰富下

我们先了解下后台表单字段位置的摆放,如下代码:

fdd1e0628fc2ed7b396a3969cf0abe3e.png

我们创建QuestionAdmin类并继承ModelAdmin类,字段顺序的位置主要依赖类中的fields变量中数组的顺序,最终我们启动服务,看到如图:

7c4ee9117bbda9326a1b3e9b48170f71.png

日期属性在前,问题标题属性在后,但是如果表单字段很多,这样排版就不是很直观,我们再调整如下:

72f2c38f12394774c3291201c6ccfc17.png

fieldsets 元组中的第一个元素是字段集的标题。以下是我们的表单现在的样子:

2a9f140d11a55a21b9672b82ab1f25d2.png

现在为我们的Question表单添加关联对象

ad957f7b3ce90fa653cc680149b2e0e6.png

现在 "Choices" 在 Django 后台页中是一个可用的选项了。“添加选项”的表单看起来像这样:

6fd7d17665f6b13fe2e87f1e3abf7b17.png

在这个表单中,"Question" 字段是一个包含数据库中所有投票的选择框。Django 知道要将 ForeignKey 在后台中以选择框 的形式展示。此时,我们只有一个投票。

同时也注意下 "Question" 旁边的“添加”按钮。每个使用 ForeignKey 关联到另一个对象的对象会自动获得这个功能。当你点击“添加”按钮时,你会见到一个包含“添加投票”的表单。如果你在这个弹出框中添加了一个投票,并点击了“保存”,Django 会将其保存至数据库,并动态地在你正在查看的“添加选项”表单中选中它。

不过,这是一种很低效地添加“选项”的方法。更好的办法是在你创建“投票”对象时直接添加好几个选项。让我们实现它。

移除调用 register() 注册 Choice 模型的代码。随后,像这样修改 Question 的注册代码:

cf238cb86db417403b129faee924cccc.png

这会告诉 Django:“Choice 对象要在 Question 后台页面编辑。默认提供 3 个足够的选项字段。”

加载“添加投票”页面来看看它长啥样:

06ba9d13c7d1f60a0ef34b63c16f703f.png

它看起来像这样:有三个关联的选项插槽——由 extra 定义,且每次你返回任意已创建的对象的“修改”页面时,你会见到三个新的插槽。

在三个插槽的末端,你会看到一个“添加新选项”的按钮。如果你单击它,一个新的插槽会被添加。如果你想移除已有的插槽,可以点击插槽右上角的X。注意,你不能移除原始的 3 个插槽。以下图片展示了一个已添加的插槽:

8824f4817381c8eaa3d0644601c56a38.png

不过,仍然有点小问题。它占据了大量的屏幕区域来显示所有关联的 Choice 对象的字段。对于这个问题,Django 提供了一种表格式的单行显示关联对象的方法。要使用它,只需按如下形式修改 ChoiceInline 申明:

class ChoiceInline(admin.TabularInline):

通过 TabularInline``(替代 ``StackedInline ),关联对象以一种表格式的方式展示,显得更加紧凑:

0cfff87415ae226fe9b7650075a386e6.png

现在投票的后台页看起来很不错,让我们对“更改列表”页面进行一些调整——改成一个能展示系统中所有投票的页面。

以下是它此时的外观:

2a1404416978fbdb13c806d464967afc.png

默认情况下,Django 显示每个对象的 str() 返回的值。但有时如果我们能够显示单个字段,它会更有帮助。为此,使用 list_display 后台选项,它是一个包含要显示的字段名的元组,在更改列表页中以列的形式展示这个对象:

50611cbaaec04a9f3ba10c4efb8dc262.png

我们在把 was_published_recently() 方法也加上:

20c5897ca1332234602354e944362fa2.png

现在修改投票的列表页看起来像这样:

89b30b8e77e1c187f4e3556cd6d0f8d4.png

你可以点击列标题来对这些行进行排序——除了 was_published_recently 这个列,因为没有实现排序方法。顺便看下这个列的标题 was_published_recently,默认就是方法名(用空格替换下划线),该列的每行都以字符串形式展示出处。

你可以通过给这个方法(在 polls/models.py 中)一些属性来达到优化的目的,像这样:

ea40342ff2693a37424901d9e82f3044.png

同时再加上如下代码在 polls/admin.py中

list_filter = ['pub_date']search_fields = ['question_text']

这样会增加一个搜索框以及侧边的筛选栏,如图:

ad59ef9066cec96309846a699406b8c8.png

现在我们要复写Django包里面部分元素,该怎么做呢,首先,我们得在manage.py当前位置创建一个templates目录,然后再创建一个admin目录,这个admin目录就可以看做是Django默认的admin应用,最终路径为mysite/templates/admin,创建好目录之后,我们还要做的就是修改mysite/mysite/settings.py文件,如下:

5bea8a8ac806a817933fd876841063d2.png

这样服务启动的时候,会扫描根目录下的templates目录,然后再去INSTALLED_APPS变量下找到对应的应用,最终会复写该应用下的模板文件,现在我们想要修改Django admin界面的标题,我们要找到Django admin应用的路径,怎么找呢,输入如下命令:

py -c "import django; print(django.__path__)"
c0426f514e7bebc44c50d4ca805f71ff.png

然后我们找到base_site.html文件拷贝到mysite/templates/admin目录下,我们修改下标题为:

d1066808913b41a0e6a862a028b97264.png

保存,然后打开浏览器http://127.0.0.1:8000/admin/

下一篇:Python之Django系列-投票应用打包-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值