Python Django-重定向后传递对象
我正在构建一个scrum应用程序,用户可以在其中创建用户故事并将其添加到Sprint中。我想有两种不同的方式来创造故事。如果用户正在从待办事项创建一个故事,那么已经创建的故事将不会分配给sprint,但是用户也可以从sprint的详细信息屏幕添加一个故事。我想这样做,如果他们从特定的sprint页面添加一个故事,该故事的sprint字段将填充该sprint 我尝试的方法是在views.py文件中创建两个不同的函数和两个单独的模板。我可以在不涉及sprint的情况下创建故事,但是我想不出一种方法来获取我导航到新模板的sprint的id 为了便于参考,我将创建与sprint无关的故事的功能包括:Python Django-重定向后传递对象,python,django,django-views,Python,Django,Django Views,我正在构建一个scrum应用程序,用户可以在其中创建用户故事并将其添加到Sprint中。我想有两种不同的方式来创造故事。如果用户正在从待办事项创建一个故事,那么已经创建的故事将不会分配给sprint,但是用户也可以从sprint的详细信息屏幕添加一个故事。我想这样做,如果他们从特定的sprint页面添加一个故事,该故事的sprint字段将填充该sprint 我尝试的方法是在views.py文件中创建两个不同的函数和两个单独的模板。我可以在不涉及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})
这是我的models.py文件:
from django.db import models
from django.contrib.auth.models import User, Group
class Sprint(models.Model):
LENGTH_CHOICES = (('1_week', '1 Week'), ('2_weeks', '2 Weeks'), ('3_weeks', '3 Weeks'))
name = models.CharField(max_length=200)
created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sprints", null=True)
project = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="sprints", null=True)
start_date = models.DateField(auto_now = False, auto_now_add = False)
end_date = models.DateField(auto_now = False, auto_now_add = False)
duration = models.CharField(max_length = 10, choices = LENGTH_CHOICES)
complete = models.BooleanField(null = True, default = False)
def __str__(self):
return self.name
class UserStory(models.Model):
STATUS_CHOICES = (('To Do', 'To Do'),('In Progress', 'In Progress'), ('In Review', 'In Review'), ('Complete', 'Complete'))
STORY_POINTS = ((0, 0), (1, 1), (2, 2), (3, 3), (5, 5), (8, 8), (13, 13), (20, 20), (40, 40), (100, 100))
name = models.CharField(max_length=300)
sprint = models.ForeignKey(Sprint, on_delete=models.CASCADE, related_name="userstories", null=True)
description = models.CharField(max_length=300)
status = models.CharField(max_length = 11, choices = STATUS_CHOICES, default = 'to do')
assignee = models.ForeignKey(User, on_delete=models.CASCADE, related_name="userstories", null=True)
estimate = models.IntegerField(choices = STORY_POINTS, default = 0)
def __str__(self):
return self.name
如果需要更多信息或代码,请告诉我,谢谢 可能会在表单“CreateNewUserStory”中为sprint ID添加一个可选的隐藏输入字段,并在用户从sprint页面创建故事时填充此字段。这样,它就包含在response.POST变量中,您可以轻松地将sprint(通过ID查询)添加到实例中。