Django получает текущий id модели после сохранения формы модели и перенаправляет его с помощью этого pk для установки в качестве fk другой модели fk в форме модели
Работаю на Django 3.2 & не удается сохранить формы со ссылкой друг на друга. Например, Project>Photos>Assignments>Students каждая форма является моделью формы & имеет связь друг с другом. У меня есть одна Project Model & Другая Photos, хочу получить id проекта после сохранения & перенаправить пользователя на следующую форму модели "Photos" со ссылкой на id проекта, где project_id является FK в Photos Model & должен быть назначен автоматически, Может кто-нибудь помочь в этом. Вот что я пробовал. Я ищу url примерно следующего вида: URL для добавления проекта: http://example.com/projects/add-project. URL для проекта загрузки фотографий: http://example.com/projects/1/upload-photos
#urls.py
path('add-project', views.submit_project, name='submit_project'),
path('<int:project_id>/upload-photo/',
views.upload_media, name='upload_media'),
#model.py code
class Project(models.Model):
owner = models.ForeignKey(User, on_delete=models.PROTECT, null=True, blank=True, related_name='project_owner')
title = models.CharField(max_length=200)
#Photo Model
class ProjectMedia(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
photo1 = models.ImageField(upload_to='projects/media/', null=True, blank=True)
#Views.py
def submit_project(request):
if (request.user.is_authenticated):
if request.method == 'POST':
form = SubmitProjectForm(request.POST, request.FILES)
if form.is_valid():
title = form.cleaned_data['title']
project = Project(title=title)
project = form.save(commit=False)
project.owner_id = request.user.id
project.save()
messages.success(
request, 'Thank you! Your project has been submitted.')
else:
form = SubmitProjectForm()
context = {
'form': form,
}
return render(request, 'add-project.html', context)
#Photo submit view
def upload_media(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
form = ProjectMediaForm(request.POST, request.FILES)
if form.is_valid():
# getting cleaned data submitted by project form
photo_1 = form.cleaned_data['photo_1']
project_media = ProjectMedia(photo_1=photo_1)
project_media = form.save(commit=False)
project_media.created_by = request.user.id
project_media.project = project
project_media.save()
messages.success(
request, 'Thank you! Your photos has been submitted')
else:
form = ProjectMediaForm()
context = {
'form': form,
'project': project
}
return render(request, 'upload-photo.html', context)