Django reverse_lazy к URL с идентификатором связанного поля
Я создал 2 связанные модели, Applicant и ApplicantStatus. После создания ApplicantStatus, я хотел бы обратным_лазом перейти на страницу с подробной информацией о заявителе на основе записи представления создания статуса заявителя.
class Applicant(models.Model):
first_name = models.CharField(max_length=50)
middle_name = models.CharField(max_length=50, null=True, blank=True)
last_name = models.CharField(max_length=50)
class ApplicantStatus(models.Model):
applicant = models.ForeignKey(Applicant, on_delete=models.PROTECT, related_name='applicant')
Здесь представлен вид создания статуса заявителя
class ApplicantStatusCreateView(LoginRequiredMixin, CreateView):
model = ApplicantStatus
form_class = ApplicantStatusCreateForm
template_name = 'recruitment/applicant_status_create.html'
def get_success_url(self):
return reverse_lazy('recruitment:applicant_detail', kwargs={'pk': self.object.pk})
Я уже знаю, что это приведет к перенаправлению на несуществующую страницу, поскольку этот заявитель еще не существует. Здесь я хотел бы получить id заявителя из формы и использовать его в kwargs, так что я увижу страницу со списком статусов заявителя.
Вот детальный вид заявителя:
@login_required()
def applicant_detail_view(request, pk):
applicant_detail = Applicant.objects.get(id=pk)
form = ApplicantStatusCreateForm
applicant_status_detail = ApplicantStatus.objects.filter(applicant__id=applicant_detail.id)
context = {
'applicant_detail': applicant_detail,
'form': form,
'applicant_status_detail': applicant_status_detail,
}
return render(request, 'recruitment/applicant_detail.html', context)
Форма создания статуса заявителя появляется и в детальном представлении, так как я использую модальное окно для отображения формы в детальном представлении.
Я нашел ответ, который оказался гораздо проще, чем я думал.
В представлении создания статуса заявителя я просто заменил:
def get_success_url(self):
return reverse_lazy('recruitment:applicant_detail', kwargs={'pk': self.object.pk})
С этим:
def get_success_url(self):
return reverse_lazy('recruitment:applicant_detail', kwargs={'pk': self.object.applicant.id})
Надеюсь, это поможет и вам.