如何将 django 表单创建的条目的主键传递给之后的下一页中的表单
How do I pass primary key of the entry created by a django-form, to the form in next page after that
我的Models.py
包含2个模型,每个Project
可以有多个Role
(即一对多关系):
class Project(models.Model):
title = models.CharField(max_length=2000)
state_of_project = models.CharField(max_length=10, default='ongoing')
introduction = models.TextField(blank=True)
class Role(models.Model):
role_name = models.CharField(max_length=30)
project = models.ForeignKey(Project, on_delete=models.SET_NULL, null = True)
def __str__(self):
return self.role_name
为模特 Project
提交表单后,我想重定向用户填写模特 Role
的下一个表单。添加的新角色应该自动将外键 project
指向之前创建的项目。
我怎样才能做到这一点?我在添加将新提交的条目(对于模型Project
)的主键传递给下一个表单(对于模型Role
)的机制时特别有问题。
您必须将主键传递给 urls.py 并通过 views.py
获取它
例如:
#urls.py
path("add-role/<int:project_id>" ,views.add_role , name="add.role"),
------------
#views.py
def add_role(request , project_id):
project = Project.objects.get(id=project_id)
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
f.project = project
f.save()
return redirect("projects")
else:
return render(request , 'add-project.html' ,{"form":form})
return render(request , 'add-project.html' , {"project":project})
在你的 html 中有这样的东西:
<form method="post" action="{% url 'add.role' project.id %}">
{% csrf_token %}
<input type="text" name="role_name" />
</form>
我的Models.py
包含2个模型,每个Project
可以有多个Role
(即一对多关系):
class Project(models.Model):
title = models.CharField(max_length=2000)
state_of_project = models.CharField(max_length=10, default='ongoing')
introduction = models.TextField(blank=True)
class Role(models.Model):
role_name = models.CharField(max_length=30)
project = models.ForeignKey(Project, on_delete=models.SET_NULL, null = True)
def __str__(self):
return self.role_name
为模特 Project
提交表单后,我想重定向用户填写模特 Role
的下一个表单。添加的新角色应该自动将外键 project
指向之前创建的项目。
我怎样才能做到这一点?我在添加将新提交的条目(对于模型Project
)的主键传递给下一个表单(对于模型Role
)的机制时特别有问题。
您必须将主键传递给 urls.py 并通过 views.py
获取它例如:
#urls.py
path("add-role/<int:project_id>" ,views.add_role , name="add.role"),
------------
#views.py
def add_role(request , project_id):
project = Project.objects.get(id=project_id)
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
f.project = project
f.save()
return redirect("projects")
else:
return render(request , 'add-project.html' ,{"form":form})
return render(request , 'add-project.html' , {"project":project})
在你的 html 中有这样的东西:
<form method="post" action="{% url 'add.role' project.id %}">
{% csrf_token %}
<input type="text" name="role_name" />
</form>