查询双外键并在模板中显示

时间:2017-03-06 13:16:44

标签: python templates django-models foreign-keys

模特:

class Patient(models.Model):
patientID = models.CharField(max_length=200, unique=True, help_text='Insert PatientID')
birth_date = models.DateField(auto_now=False, auto_now_add=False, help_text='YYYY-MM-DD')
gender = models.CharField(max_length=200,choices=Gender_Choice, default='UNDEFINED')

class Examination(models.Model):
number_of_examination = models.IntegerField()
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
date_of_examination = models.DateField(auto_now=False, auto_now_add=False, help_text='YYYY-MM-DD')

class GeneralData(models.Model):
examination = models.ForeignKey(Examination, on_delete=models.CASCADE)
height = models.FloatField(default='-', help_text= '[m] not [cm]! ')
weight = models.FloatField(default='-', help_text= '[kg]')
aha_classification = models.IntegerField(choices=AHA_CHOICES, default=0)

我的问题: 我不知道如何查询一般数据对象,其中一个特殊患者的检查次数= 1。我想在患者的详细页面上显示该对象。我可以毫无问题地在Examination类上查询。但后来我只是不知道如何查询generaldata对象。详细信息页面仅加载患者模型。由于这个原因,我必须从Patient模型中查询Exam模型到Generaldata模型吧?或者是否可以在模板中加载其他模型?谢谢你的帮助!

知道了! 添加到我的DetailView:

def DetailView(generic.DetailView):
model = Patient
template_name = 'app/detail.html'

    def get_context_data(self, **kwargs):
    # Call the base implementation first to get a context
    context = super(DetailView, self).get_context_data(**kwargs)
    # Add in a QuerySet
    context['FirstGeneral'] = GeneralData.objects.filter(examination__number_of_examination=1, examination__patient=get_object_or_404(Patient, pk=self.kwargs.get('pk')))
    return context

1 个答案:

答案 0 :(得分:0)

  

“详情页面仅加载患者模型(...)是否可以在模板中加载其他模型?”

您不“在模板中”加载“模型”,将它们(或您想要的任何其他对象)传递给模板的上下文 - 通常来自您的视图代码,但实际上来自您想要渲染模板的任何内容。当然,您可以随意传递任何内容,填充模板上下文取决于您。

  

将运行的查询是:     Generaldata.objects.filter(examination__number_of_examination=1, examination__patient=Testpatient)

     

但这是错误的顺序。

为什么“错误的顺序”?如果该查询有效阻止您使用它?

注意:如果您使用的是通用DetailView,则添加额外的上下文为documented here