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

Django中用UpdateView编辑时如何加载带复选框的数据表格?

解决方案

1. 更新CampaignEditor类,传递必要数据到模板

重写get_context_data方法,把邮件列表和当前Campaign已关联的邮件ID注入模板上下文:

class CampaignEditor(UpdateView):
    model = Campaigns
    template_name = 'mailsinfo/add_campaign.html'
    form_class = CampaignsForm

    def get_context_data(self, **kwargs):
        # 获取默认上下文
        context = super().get_context_data(**kwargs)
        # 加载所有邮件数据,和新增功能保持一致
        email_data = list(Emails.objects.values())
        context['data'] = MailsTableWithoutPass(email_data)
        # 获取当前Campaign已选中的邮件ID列表
        current_campaign = self.get_object()
        selected_ids = list(
            CampaignEmail.objects.filter(campaigne_guid=current_campaign.pk)
            .values_list('email_guid', flat=True)
        )
        context['selected_email_ids'] = selected_ids
        return context

2. 修改模板,初始化表格并勾选已选中的行

在表格初始化的JS代码中,添加勾选逻辑:

<script>
    var $table = $('#table')

    $(function() {
        var data = {{data|safe}}
        // 获取已选中的邮件ID
        var selectedIds = {{selected_email_ids|safe}};
        // 初始化表格
        $table.bootstrapTable({data: data})
        // 根据ID勾选对应的行
        $table.bootstrapTable('checkBy', {field: 'id', values: selectedIds});
    })
</script>

3. 处理编辑时的关联数据更新

重写CampaignEditor的form_valid方法,确保编辑时先清除旧关联,再新增新关联:

def form_valid(self, form):
    # 先保存Campaign表单数据
    response = super().form_valid(form)
    current_campaign = self.object
    # 获取提交的选中邮件ID
    submitted_ids = self.request.POST.get('IDs', '')
    
    # 清除当前Campaign的所有旧关联邮件
    CampaignEmail.objects.filter(campaigne_guid=current_campaign.pk).delete()
    
    # 添加新的关联邮件
    if submitted_ids:
        ids_list = submitted_ids.split(',')
        for email_id in ids_list:
            CampaignEmail.objects.create(
                email_guid=int(email_id), 
                campaigne_guid=current_campaign.pk
            )
    return response

4. 移除冗余逻辑(可选)

编辑功能的保存逻辑已在form_valid中实现,无需再调用addCampaignDataToDB。新增功能可保留原函数,二者互不影响。

修改完成后,访问编辑URL时:

  • 表单自动填充当前Campaign的数据
  • 数据表格加载所有邮件
  • 之前选中的邮件自动被勾选
  • 保存时同步更新Campaign信息及关联的邮件记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:40:29