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})

Надеюсь, это поможет и вам.

Вернуться на верх