Django 将SQL查询转换为精心制作的查询集
我有一个原始的queryset,我想在queryset中翻译它。但我总是以错误告终 以下是原始查询:Django 将SQL查询转换为精心制作的查询集,django,django-queryset,Django,Django Queryset,我有一个原始的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'
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
)
非常感谢您的回答。您可以使用以下内容对
表1
模型进行注释:
from django.db.models import Max, Count
Table1.objects.annotate(
count=Count('t_entries__table3'),
latest=Max('t_entries__table3__timestamp')
)
由此查询集生成的
表1
对象将具有额外的属性.count
和.latest
您可以共享相关模型吗?我编辑了问题:)