将 SQL 查询翻译成一个制作精良的查询集

Translate SQL query into a well made QuerySet

我有一个原始查询集,我想在 QuerySet 中进行翻译。但我总是以错误结束。

这是原始查询:

q = Table1.objects.raw(
     '''SELECT base_table1.id, base_table1.name, base_table1.n_id, count(base_table2.id) as 'count', max(base_table2.timestamp) as 'latest'
                                     FROM base_table1
                                     INNER JOIN base_table3 on base_table3.table1_id = base_table1.id
                                     INNER JOIN base_table2 on base_table2.table3_id = base_table3.id
                                     GROUP by base_table1.id'''

注意:这里我不需要 base_table1.id,但 rawQuerySet

需要它

以下是模型:

class Table1(models.Model):
n_id = models.PositiveIntegerField()
name = models.CharField(max_length=45)

class Table2(models.Model):
table3 = models.ForeignKey(
    Table3, null=True, blank=True, on_delete=models.SET_NULL
)
timestamp = models.DateTimeField(null=True)


class Table3(models.Model):
table1 = models.ForeignKey(
    Table1, null=True, related_name='t_entries', on_delete=models.SET_NULL
)

非常感谢您的回答。

您可以使用以下方式注释 Table1 模型:

from django.db.models import Max, Count

Table1.objects.annotate(
    count=Count('t_entries__table3'),
    latest=Max('t_entries__table3__timestamp')
)

由此查询集产生的 Table1 对象将具有额外的属性 .count.latest