Django admin 列表添加按钮

Django admin 列表添加按钮

Django admin 列表添加按钮

Django是一个流行的Python Web框架,它提供了许多强大的功能,其中之一就是自动生成管理后台界面,即Django admin。通过Django admin,开发者可以快速方便地管理数据库中的数据,包括增删改查等操作。然而,在默认情况下,Django admin并没有提供在列表页面中添加自定义按钮的功能。本文将详细介绍如何在Django admin列表页面中添加按钮,并实现自定义功能。

准备工作

在开始之前,我们假定您已经有一个基本的Django项目,并已经创建了一个模型(Model)并注册到admin后台。本文将以一个简单的博客应用为例进行演示。

首先,在您的Django项目中创建一个名为”blog”的应用,并定义一个名为”Post”的模型,用来存储博客文章的信息。模型代码如下所示:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

然后,在应用目录下的admin.py文件中注册该模型到Django admin后台:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

现在,启动Django开发服务器并访问/admin页面,您应该能在后台管理界面看到”Post”模型对应的列表页面。

添加自定义按钮

在默认的Django admin列表页面中,通常只有一些默认的操作按钮,如”查看”、”修改”、”删除”等。如果我们想要添加一个自定义按钮,比如一个”发布”按钮,用来标记文章已经发布,该如何实现呢?

方法一:自定义Action

Django admin提供了自定义Action的功能,通过Action我们可以批量操作选中的数据。我们可以利用这个功能来添加一个自定义Action,实现批量将文章标记为已发布的功能。

首先,在models.py中为Model添加一个方法:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    published = models.BooleanField(default=False)

    def publish(self):
        self.published = True
        self.save()

然后,在admin.py中定义一个Action:

def publish_posts(modeladmin, request, queryset):
    for post in queryset:
        post.publish()

publish_posts.short_description = "Mark selected posts as published"

最后,将这个Action注册到admin后台:

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    actions = [publish_posts]

现在,您可以在Post模型的列表页面上看到一个名为”Actions”的下拉菜单,里面包含了我们自定义的”Mark selected posts as published”选项。通过选中文章并选择该选项,您就可以将这些文章标记为已发布状态。

方法二:自定义Template

除了使用自定义Action外,我们还可以通过自定义模板来实现在列表页面中添加按钮的功能。这种方法更加灵活,可以实现更复杂的功能。

首先,在应用目录下创建一个名为”templates/admin”的文件夹,并在其中新建一个名为”post_change_list.html”的模板文件:

{% extends 'admin/change_list.html' %}

{% block object-tools-items %}
    <div>
        <a href="{% url 'admin:blog_post_add'%}" class="button">Add New Post</a>
    </div>
    {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}
    {% if cl.show_save_as_new %}{% blocktrans with cl.opts.verbose_name as verbose_name %}<input type="submit" value="{% trans 'Save as new' %} {{ verbose_name }}">{% endblocktrans %}{% endif %}
{% endblock %}

这个模板继承了Django admin默认的列表页面模板”admin/change_list.html”,并在其中添加了一个名为”Add New Post”的按钮。点击该按钮将跳转到添加新文章的页面。

接着,在admin.py中注册这个自定义模板:

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    change_list_template = 'admin/post_change_list.html'

重新刷新/admin页面,您应该能看到Post模型的列表页面上多了一个”Add New Post”的按钮,点击该按钮将跳转到添加新文章的页面。

总结

通过上述两种方法,我们成功实现了在Django admin列表页面中添加自定义按钮的功能。第一种方法通过自定义Action实现了批量操作数据的功能,第二种方法通过自定义模板实现了添加单个按钮的功能。您可以根据需求选择适合的方法来定制Django admin后台界面,让管理数据变得更加灵活高效。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程