Django reverse_lazy 到具有相关字段 ID 的 URL

Django reverse_lazy to a URL with a related field id

我创建了 2 个相关模型,Applicant 和 ApplicantStatus。创建 ApplicantStatus 后,我想 reverse_lazy 根据申请人状态创建查看条目的申请人详细信息页面。

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

希望对你也有帮助。