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

Django模板嵌套for循环问题:实现活动邀请发送/取消按钮功能

问题根源

原模板的嵌套循环逻辑错误:遍历每个用户profile时,会循环当前活动的所有邀请记录,每一条记录都会输出一个按钮,所以单个用户的按钮数量和活动已发邀请总数一致,完全不符合预期。

最优实现方案(推荐)

步骤1:视图层预处理数据(性能最优,减少模板冗余逻辑)

提前在视图中将当前活动已邀请的用户ID提取为集合,后续判断时间复杂度为O(1),远高于模板循环判断的效率。
修改后的视图代码:

def get_list_of_all_users(request, event_id):
    """获取所有用户列表"""
    event = Event.objects.get(id=event_id)
    profiles = Profile.objects.all()
    # 提取当前活动所有已邀请的profile id,存为集合方便快速判断
    invited_profile_ids = set(EventInviteRequest.objects.filter(from_event=event).values_list('to_profile_id', flat=True))

    context = {
        'profiles': profiles,
        'event': event,
        'invited_profile_ids': invited_profile_ids
    }
    return render(request, 'events/invite_all_profiles_to_event.html', context)

步骤2:替换模板中的嵌套循环代码

删除原来的{% for req in requests %}循环段,替换为如下逻辑:

{% if request.user.profile != profile %}
<br>
{% if profile.id in invited_profile_ids %}
    <a href="{% url 'events:cancel_event_invite' event.id profile.id %}">取消邀请</a>
{% else %}
    <a href="{% url 'events:invite_user_to_event' event.id profile.id %}">发送邀请</a>
{% endif %}
{% endif %}

你当前临时方案的问题

你自己写的临时方案没有过滤「当前活动」的限制,只会判断该profile是否收到过任意活动的邀请,如果该用户收到过其他活动的邀请,就会出现判断错误、多按钮重复的问题,仅可临时应急使用,不建议长期上线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04