在 Django 的 admin change_form 中创建自定义按钮

在Django的admin change_form中创建自定义按钮可以通过以下步骤实现,这里以一个简单的例子为例说明如何添加一个“保存并继续编辑”按钮:

### 1. 首先,你需要定义一个Admin类(继承自`admin.ModelAdmin`):

```python
from django.contrib import admin
from .models import YourModel  # 替换为你的模型名

class CustomModelAdmin(admin.ModelAdmin):
    pass  # 在这里添加你的自定义方法或配置
```

### 2. 然后,在`CustomModelAdmin`中定义一个视图方法(例如 `save_and_continue`):

```python
def save_and_continue(self, request, form):
    form.save()  # 保存表单数据
    return HttpResponseRedirect('/admin/yourapp/yourmodel/')  # 返回原页面继续编辑

save_and_continue.short_description = "保存并继续编辑"  # 给按钮添加描述
```

### 3. 在`CustomModelAdmin`中注册这个视图方法为Django admin的操作:

```python
actions = ['save_and_continue']
```

### 4. 最后,将自定义的Admin类与你的模型关联起来:

```python
admin.site.register(YourModel, CustomModelAdmin)  # 替换为你想要注册的模型和自定义Admin类
```

### 完整代码示例:

```python
from django.contrib import admin
from django.http import HttpResponseRedirect
from .models import YourModel  # 假设这是你要管理的模型

class CustomModelAdmin(admin.ModelAdmin):
    actions = ['save_and_continue']  # 注册自定义操作

    def save_and_continue(self, request, form):
        form.save()  # 保存表单数据
        return HttpResponseRedirect('/admin/yourapp/yourmodel/')  # 返回原页面继续编辑

    save_and_continue.short_description = "保存并继续编辑"  # 给按钮添加描述

admin.site.register(YourModel, CustomModelAdmin)  # 注册你的模型和自定义Admin类
```

这样,在Django的admin change_form中就会出现一个“保存并继续编辑”的按钮。点击这个按钮后,数据将被保存,但页面不会跳转到列表页而是留在当前编辑页面等待你继续编辑。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Django后台添加自定义按钮,需要进行以下步骤: 1. 创建一个 Django app,例如 app_name。 2. 在 app_name 下创建一个 admin.py 文件。 3. 导入 Djangoadmin 模块和你要编辑的模型。 4. 创建一个继承自 admin.ModelAdmin 的类,并在其定义一个自定义方法,例如 my_custom_button。 5. 在该类覆盖 change_list_template 属性,使其使用自定义的模板。 6. 创建一个自定义的 HTML 模板,其包含一个表单和一个提交按钮。 7. 在自定义的模板使用 {% url %} 模板标签来指定提交表单的 URL。 8. 在 app_name 下创建一个 urls.py 文件,并将自定义的 URL 映射到一个视图函数。 9. 在视图函数实现你想要执行的操作,例如导出数据。 10. 在 app_name 的 urls.py 文件添加一个 URL 映射,将其指向刚才创建的视图函数。 以下是一个示例代码: ```python # app_name/admin.py from django.contrib import admin from django.urls import reverse from django.utils.safestring import mark_safe from .models import MyModel class MyModelAdmin(admin.ModelAdmin): model = MyModel def my_custom_button(self, obj): url = reverse('admin:myapp_myview', args=[obj.pk]) return mark_safe(f'<a class="button" href="{url}">Custom Action</a>') my_custom_button.short_description = 'Custom Action' my_custom_button.allow_tags = True change_list_template = 'myapp/change_list.html' def get_urls(self): urls = super().get_urls() my_urls = [ path('myview/<int:pk>/', self.my_view, name='myapp_myview'), ] return my_urls + urls def my_view(self, request, pk): # Do something here return redirect(reverse('admin:myapp_mymodel_changelist')) admin.site.register(MyModel, MyModelAdmin) ``` ```html <!-- myapp/change_list.html --> {% extends "admin/change_list.html" %} {% block object-tools-items %} {{ block.super }} <li> <form method="post" action="{% url 'admin:myapp_myview' 0 %}"> {% csrf_token %} <input type="submit" value="Custom Action"> </form> </li> {% endblock %} ``` ```python # app_name/urls.py from django.urls import path from .views import my_view app_name = 'myapp' urlpatterns = [ path('myview/<int:pk>/', my_view, name='myview'), ] ``` 这样,你就可以在 Django 后台页面上看到一个自定义按钮,并且点击该按钮将会执行你定义的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值