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

Django如何实现点击新窗口按钮更新数据库后关窗口并刷新主页面

告警功能修复方案

你不需要单独开发alert_update.html,提交更新操作后直接返回JS脚本执行即可,以下是全流程修正方案:

代码修正步骤

1. 修正forms.py

当前表单类继承错误,要关联模型的表单需要继承ModelForm而非普通Form:

from django import forms
from .models import Event

class EventStatusForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = ('event_status',)

2. 修正alert_list.html,确保点击告警打开新窗口

给a标签添加target="_blank"属性,同时修复遍历数字报错的问题:

{% for event_alert in event_list %}
    {% if event_alert.event_status == 1 %}
    <div class="col-1 red">
        <div class="p-3 rounded-2" id="dash_board_patient_alert">
            <!-- 加target="_blank"实现新窗口打开详情 -->
            <a href="{% url 'Alert Detail' event_alert.event_id %}" target="_blank">{{event_alert.member_id}} {{event_alert.event_type}}</a>
        </div>
    </div>
    {% endif %}
{% endfor %}
{{event_alert_activate_count}}
{% for _ in "x"|rjust:pink_block %}
<div class="col-1 pink">
    <div class="p-3 rounded-2" id="dash_board_patient_alert">
        <a href="#"></a>
    </div>
</div>
{% endfor %}

注:原代码直接遍历int类型的pink_block会报错,上面用"x"|rjust:pink_block生成指定长度的字符串,实现循环12次的需求。


3. 修正alert_detail.html

你已经在详情视图里传入了单条event对象,不需要循环event_list,也不需要给用户展示event_status输入框,直接删除表单里的{{ form }}即可:

<form method="POST" class="post-form" action="{% url 'Alert Update' event.pk %}">
    {% csrf_token %}
    <button
        type="submit"
        class="btn btn-primary"
        id="patient_alert_result_confirm">
        Confirm
    </button>
</form>

4. 重写alertUpdate视图逻辑

原视图逻辑存在未绑定表单实例、JS逻辑不适用新窗口场景的问题,修正后如下:

from django.shortcuts import get_object_or_404, redirect
from django.http import HttpResponse
from .models import Event

def alertUpdate(request,pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        # 直接修改告警状态保存即可,不需要额外表单校验
        event.event_status = 0
        event.save()
        # 返回JS逻辑:先刷新父级告警列表页,再关闭当前新窗口
        return HttpResponse('<script>window.opener.location.reload();window.close();</script>')
    # 非POST请求直接跳回告警列表页
    return redirect('Alert List')

说明:更新操作执行完直接返回JS脚本执行前端操作即可,不需要渲染额外的alert_update.html页面。


内容的提问来源于stack exchange,提问作者김민수

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:01