You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中通过按钮自动更新Model的active字段?

在Django中实现点击按钮自动更新active字段的方案

我来帮你搞定这个需求,其实步骤很清晰,咱们一步步来:

1. 修复模板中的表单

首先你的表单缺少Django必需的CSRF令牌(否则会触发403权限错误),而且最好明确指定提交的目标URL。修改后的模板代码如下:

<form action="{% url 'development_detail' object.pk %}" method="POST">
    {% csrf_token %}
    <input type="submit" name="archive" class="btn btn-primary pull-right" value="Archive" />
</form>

这里development_detail是你详情页的URL名称,记得替换成你自己项目里的实际名称。如果表单就在详情页上,也可以把action留空,默认会提交到当前页面。

2. 处理视图逻辑

有两种常见的实现方式,你可以根据自己当前用的视图类型选择:

方式一:在详情类视图中处理POST请求

如果你用的是Django的DetailView(基于类的视图),直接重写post方法即可:

# views.py
from django.views.generic.detail import DetailView
from .models import Development

class DevelopmentDetailView(DetailView):
    model = Development
    template_name = '你的模板路径.html'  # 替换成实际模板路径

    def post(self, request, *args, **kwargs):
        # 获取当前的Development对象
        self.object = self.get_object()
        # 将active字段设为False
        self.object.active = False
        self.object.save()
        # 重定向回详情页(也可以添加成功提示后再返回)
        return self.get(request, *args, **kwargs)

方式二:用单独的函数视图处理归档操作

这种方式更符合单一职责原则,把归档逻辑和详情展示分开:

# views.py
from django.shortcuts import get_object_or_404, redirect
from .models import Development
from django.views.decorators.http import require_POST

@require_POST  # 只允许POST请求访问
def archive_development(request, pk):
    # 获取要归档的对象
    dev = get_object_or_404(Development, pk=pk)
    # 更新active字段
    dev.active = False
    dev.save()
    # 重定向回详情页
    return redirect('development_detail', pk=pk)

然后在urls.py中添加对应的路由:

# urls.py
from django.urls import path
from .views import DevelopmentDetailView, archive_development

urlpatterns = [
    path('development/<int:pk>/', DevelopmentDetailView.as_view(), name='development_detail'),
    path('development/<int:pk>/archive/', archive_development, name='archive_development'),
]

这种情况下,模板里的表单action要改成:

action="{% url 'archive_development' object.pk %}"

3. 验证效果

完成后,点击"Archive"按钮,active字段就会被自动更新为False,页面会重定向回详情页。你可以在后台管理页面查看该对象的active状态,确认是否修改成功。

内容的提问来源于stack exchange,提问作者OnionSandwich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:19