我有3张桌子
所有测试
报告格式
参数
AllTests的reportFormat为ForeignKey,具有一对一关系。
class AllTests(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=200)
reportFormat=models.ForeignKey(ReportFormat)
.....
.....
class Meta:
db_table = 'AllTests'
参数表将reportFormat作为ForeignKey与一个过多的关系。表示一种报告格式具有许多参数。
class Parameter(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=200)
reportFormat=models.ForeignKey(ReportFormat)
.....
.....
class Meta:
db_table = 'AllTests
ReportFormat表:-
class ReportFormat(models.Model):
id=models.AutoField(primary_key=True)
.....
.....
class Meta:
db_table = 'ReportFormat'
我想对参数模型进行查询,以返回带有相关测试数据的参数数据。请为我建议一个更好的方法。
我当前的查询是这样的。
from django.db.models import (
Sum, Value, Count, OuterRef, Subquery
)
data = Parameter.objects.filter(isDisable=0).values('id', 'name', 'reportFormat_id').annotate(
test=Subquery(Alltsets.objects.filter(reportFormat_id=OuterRef('reportFormat_id').values('id', 'name')))
)
最佳答案
由于两个表的报告格式列都引用报告格式表的同一列,因此您可以将它们直接与以下内容相关联。
select * from parameter inner join alltests on parameter.reportformat=alltests.reportformat
也许在ORM中是这样的?
Parameter.objects.filter().annotate(alltests_id=F('reportformat__alltests__id'),alltests_name=F('reportformat__alltests__name'),....other fields)