如何将 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>