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

Django页面跳转添加关联表数据及表单下拉选项重复问题

问题1:跳转表单页自动填充关联游戏且不报错

错误原因

你跳转链接传递的参数是Game表的主键ID,但视图中错误使用该ID查询Event表的主键,且你的需求是新增事件而非修改已存在的事件,不需要提前查询Event实例。

解决方法

修改add_event视图逻辑,先根据传入的game_id查询对应的游戏对象,再给表单初始化project字段的默认值即可:

from django.shortcuts import redirect, get_object_or_404

def add_event(request, game_id):
    # 查询对应游戏对象,不存在则直接返回404
    target_game = get_object_or_404(Game, pk=game_id)
    if request.method == "POST":
        form = addEventForm(request.POST)
        if form.is_valid():
            # 提交时自动绑定关联游戏,避免用户修改
            new_event = form.save(commit=False)
            new_event.project = target_game
            new_event.save()
            # 替换为你需要跳转的后续页面路由
            return redirect("game-list")
    else:
        # 表单初始化时自动填充project字段为当前游戏
        form = addEventForm(initial={"project": target_game})
    return render(request, "pages/add_event.html", {"form": form, "target_game": target_game})

如果不希望用户修改自动填充的关联游戏,可以在addEventForm中将project字段设置为disabled或者HiddenInput类型。

问题2:下拉框项目名选项去重

错误原因

你当前模板的遍历逻辑错误:event.game.project_name是单个字符串,遍历该值只会拆分输出单个字符;且你从Event表关联查询project值,同一个游戏关联多个事件就会出现重复选项。

解决方法

Game模型的project_name已经设置了unique=True约束,本身不存在重复值,直接遍历所有Game对象即可:

  1. 首先在表单页的视图中,将所有游戏对象传入模板上下文:
# 以add_event视图为例,其他视图同理
def add_event(request, game_id=None):
    # ...原有逻辑...
    all_games = Game.objects.all()
    return render(request, "pages/add_event.html", {"form": form, "all_games": all_games})
  1. 修改模板下拉框代码:
<select class="form-control" name="choices-single-no-sorting" id="project-tier-entry-level">
    <option value="" disabled selected hidden>Please Choose...</option>    
    {% for game in all_games %}
    <option value="{{ game.project_name }}">{{ game.project_name }}</option>
    {% endfor %}
</select>

如果确实需要从Event表查询关联的项目名,可使用distinct()去重,查询语句为Event.objects.values_list("project", flat=True).distinct()。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:01