Django项目怎么自定义管理站点

  介绍

这篇文章将为大家详细讲解有关Django项目怎么自定义管理站点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>一、自定义后台表单

在前面的学习过程中,通过admin.site.register(提问)语句,我们在管理站点中注册了问题模型.Django会自动生成一个该模型的默认表单页面。如果你想自定义该页面的外观和工作方式,可以在注册对象的时候告诉Django你的自定义选项。

下面是一个修改管理表单默认排序方式的例子。修改民意调查/admin。py的代码::

得到django.contrib  import 管理   得到.models  import  Questionclass  QuestionAdmin (admin.ModelAdmin):   ,,,fields =, (& # 39; pub_date& # 39;,, & # 39; question_text& # 39;] admin.site.register(问题,,QuestionAdmin)

你只需要创建一个继承admin.ModelAdmin的模型管理类,然后将它作为第二个参数传递给admin.site.register(),第一个参数则是问题模型本身。

上面的修改让出版日期字段显示在问题字段前面了(默认是在后面)。如下图所示:

 Django项目怎么自定义管理站点

对于只有2个字段的情况,效果看起来还不是很明显,但是如果你有一打的字段,选择一种直观的符合我们人类习惯的排序方式则非常有用。

还有,当表单含有大量字段的时候,你也许想将表单划分为一些字段的集合。再次修改民意调查/admin。py:

得到django.contrib  import 管理   得到.models  import  Questionclass  QuestionAdmin (admin.ModelAdmin):   ,,,fieldsets =, (   ,,,,,,,(没有,,,,,,,,,,,,,,,,{& # 39;领域# 39;:,(& # 39;question_text& # 39;]}),   ,,,,,,,(& # 39;Date 信息# 39;,,{& # 39;领域# 39;:,(& # 39;pub_date& # 39;]}),   ,,,)admin.site.register(问题,,QuestionAdmin)

字段集合控件组中每一个元组的第一个元素是该字段集合的标题。它让我们的页面看起来像下面的样子:

 Django项目怎么自定义管理站点

<强>二、添加关联对象

虽然我们已经有了问题的管理页面,但是一个问题有多个选择,如果想显示选择的内容怎么办?有两个办法可以解决这个问题第。一个是像问题一样将选择注册到admin站点,这很容易,修改民意调查/admin。py,增加下面的内容:

得到django.contrib  import  adminfrom  .models  import 选择,,问题#,…admin.site.register(选择)

重启服务器,再次访问管理页面,就可以看到选择条目了:

 Django项目怎么自定义管理站点

点击它右边的添加按钮,进入“添加选择”表单页面,看起来如下图:

 Django项目怎么自定义管理站点

在这个表单中,问题字段是一个选择选择框,包含了当前数据库中所有的问题实例.Django在admin站点中,自动地将所有的外键关系展示为一个选择框。在我们的例子中,目前只有一个问题对象存在。

请注意图中的绿色加号,它连接到问题模型。每一个包含外键关系的对象都会有这个绿色加号。点击它,会弹出一个新增问题的表,单类似问题自己的添加表单。填入相关信息点击保存后,Django自动将该问题保存在数据库,并作为当前选择的关联外键对象。白话讲就是,新建一个问题并作为当前选择的外键。

但是实话说,这种创建方式的效率不怎么样。如果在创建问题对象的时候就可以直接添加一些选择,那会更好,这就是我们要说的第二种方法。下面,让我们来动手试试。

首先,删除民意调查/admin.py中选择模型对注册()方法的调用。然后,编辑问题的内容,最后整个文件的代码应该如下:

得到django.contrib  import  adminfrom  .models  import 选择,,Questionclass  ChoiceInline (admin.StackedInline):   ,,,model =,选择   ,,,extra =, 3 class  QuestionAdmin (admin.ModelAdmin):   ,,,fieldsets =, (   ,,,,,,,(没有,,,,,,,,,,,,,,,,{& # 39;领域# 39;:,(& # 39;question_text& # 39;]}),   ,,,,,,,(& # 39;Date 信息# 39;,,{& # 39;领域# 39;:,(& # 39;pub_date& # 39;],, & # 39;类# 39;:,(& # 39;崩溃# 39;]}),   ,,,)   ,,,inlines =, [ChoiceInline] admin.site.register(问题,,QuestionAdmin)

Django项目怎么自定义管理站点