首页 > 解决方案 > 在 Django 创建视图中传递主键

问题描述

我正在使用基于类的视图,在该视图中显示了一个表单,其信息与模型(称为 Tratamiento)相关联,该模型具有模型的外键,称为Paciente

我的问题是,在保存治疗时,表格会显示所有可用的患者,因为我想要的行为是从列出所有患者的表格中,当我选择一个时,该患者可以添加治疗。也就是说,在一个新模板中(在这种情况下,我正在使用模态进行测试),患者是固定的,并且没有显示所有患者的下拉菜单。

这是网址:

url(r'^tratamiento/$', views.TratamientoCreateView.as_view(), name='tratamiento'),

这是我的Tratamiento模型:

class Tratamiento(models.Model):
    class Meta:
        ordering = ['doctorDerivador']
    doctorDerivador = models.ForeignKey(DoctorDerivador, on_delete=models.CASCADE)
    paciente = models.ForeignKey(Paciente, on_delete=models.CASCADE)
    diagnostico = models.CharField(max_length=50, null = True, blank = True)
    fechaInicioTratamiento = models.DateField()
    motivoConsulta = models.CharField(max_length=100, null = True, blank = True)
    fechaFinTratamiento = models.DateField(null=True, blank=True)
    evaluacion = models.TextField(null=True, blank=True) 

这是我的看法:

class TratamientoCreateView(BSModalCreateView):
    model = Tratamiento
    
    template_name = '../templates/tratamiento.html'
    form_class = TratamientoModelForm
    success_message = 'Success: Tratamiento dado de alta.'
    success_url = reverse_lazy('index')

这就是发生在我身上的事情:

请您告诉我如何将主键传递给视图,因为 pk 在 url 中。我做了一些测试,但没有进一步的结果。

标签: djangodjango-class-based-views

解决方案


您可以覆盖 dispatch 方法来检索您的特定模型:

from django.shortcuts import get_object_or_404    

def dispatch(self, request, *args, **kwargs):
    self.tratamiento = get_object_or_404(Tratamiento, pk=kwargs['pk'])
    return super().dispatch(request, *args, **kwargs)

kwargs有一个 pk 字段,可以在 URL 中指定

dispatch是大多数基于类的视图中的方法,在加载视图之前调用。现在您可以在其他方法(即 get_context_data、post 等)中对模型进行操作。


推荐阅读