繁体   English   中英

Django - 重定向后通过 Object ID

[英]Django - Pass Object ID after redirect

如果问题标题有误,我深表歉意,但我不确定我需要做什么。 我正在构建一个 scrum 应用程序,用户可以在其中创建用户故事并将其添加到 sprint。 我想有两种不同的方式来创作故事。 如果用户正在从积压工作中创建故事,则已创建的故事不会分配给 sprint,但用户也可以从 sprint 的详细信息屏幕添加故事。 我想这样做,如果他们从特定 sprint 的页面添加故事,该故事的 sprint 字段将填充该 sprint。

我尝试 go 的方法是在我的 views.py 文件和两个单独的模板中创建两个不同的函数。 我能够在不按预期与 sprint 相关的情况下创建故事,但我想不出一种方法来获取我从中导航到新模板的 sprint 的 id。

作为参考,我已经包含了我的 function 用于创建与 sprint 无关的故事:

def create_story(response, id=None):
    user = response.user
    if response.method == "POST":
        form = CreateNewUserStory(response.POST)
        if form.is_valid():
            name = form.cleaned_data["name"]
            description = form.cleaned_data["description"]
            status = form.cleaned_data["status"]
            assignee = form.cleaned_data["assignee"]
            estimate = form.cleaned_data["estimate"]
            userstory = UserStory(name=name, description=description, status=status, assignee=assignee, estimate=estimate)
            userstory.save()
            response.user.userstories.add(userstory)
            return HttpResponseRedirect("/backlog")
    else:
        form = CreateNewUserStory()
    return render(response, "main/create_story.html", {"form": form})

如果需要更多信息或代码,请告诉我,谢谢!

您可以定义 2 个 URL,其中一个具有可选的 sprint ID:

urls.py

path('story/<int:sprint_id>/add/', views.create_story, name='create_story_for_sprint'),
path('story/add/', views.create_story, name='create_story_for_backlog'),

views.py

def create_story(request, sprint_id=None):
   ...
   form = CreateNewUserStory(response.POST, initial={"sprint_id": sprint_id})
   if form.is_valid():
       ...
       sprint_id = form.cleaned_data["sprint_id"]

create_story.html

<form action="..." method="POST">
    <input type="hidden" name="sprint_id" value="{{ sprint_id|default_if_none:'' }}">
    ...

然后,在您的 sprint 页面中,使用

<a href="{% url 'create_story_for_sprint' sprint.id %}">Add Story</a>

并在您的积压页面中:

<a href="{% url 'create_story_for_backlog' %}">Add Story</a>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM