Django 从三个表中检索数据

Posted

技术标签:

【中文标题】Django 从三个表中检索数据【英文标题】:Django retrieve data from three tables 【发布时间】:2020-07-28 17:49:38 【问题描述】:

问题

我正在使用 django 最新版本。我有三个这样命名的表模型

Class MCH():
Name= models.CharField()


Class Staff():
Name=models.CharField()
Mch=models.ForeignKey(MCH,,on_delete=models.CASCADE)
location=models.CharField(..)

Class Patients():   
Name=models.CharField()
Staff=models.ForeingKey(Staff,on_delete=models.CASCADE)
Phone=models.CharField()

我想使用 Django 方法加入树表并通过MCH过滤数据

我试过了

ServedPatients=Patients.objects. select_related(Staff__MCH='mch1')

【问题讨论】:

【参考方案1】:

您可以通过以下方式获取数据:

ServedPatients = Patients.objects.select_related('Staff', 'Staff_Mch')

或者如果你想过滤MCH的名字,你可以用:

ServedPatients = Patients.objects.filter(<b>Staff__Mch__Name='mch1'</b>)

在这里,您可以获得具有 StaffPatients 对象和名称为 'mch1'Mch。但是,在这里您不会将 StaffMch 的数据添加到关系中,您可以将两者结合:

ServedPatients = Patients.objects.select_related(
    'Staff', 'Staff_Mch'
).filter(Staff__Mch__Name='mch1')

注意:通常Django模型中的字段名是用snake_case写的,而不是PerlCase,所以应该是:@ 987654331@ 而不是 Staff

 

注意:通常 Django 模型被赋予一个单数名称,所以Patient而不是Patients

【讨论】:

以上是关于Django 从三个表中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 从多个表中检索数据

如何从表中检索票数最高的候选人姓名[关闭]

用于从多个表中检索数据的 Sql 查询

从具有多对多关系 django 的两个表中过滤数据

从单个表中检索具有不同值的同一列的多个输出时的性能问题

从3个表中检索数据如何使用Laravel中的第一个表从最后一个表中检索数据