我有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)

08-18 00:31