Как передать первичный ключ записи, созданной django-формой, форме на следующей после нее странице?
Моя 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>