将SQL查询转换为Django模型

时间:2019-06-13 02:52:21

标签: django

我有一个SQL查询:

   Select * From Order a Where date = (Select Max(b.date) From Order b Where a.company = b.company)

如何使用Django ORM将其转换为Django方式?

型号:

class Order(models.Model):
    id            = models.UUIDField(primary_key=True, default=uuid.uuid4)
    company       = models.ForeignKey('company', on_delete =models.CASCADE, null=False)
    text          = models.TextField(null=True, blank=True)                      
    date          = models.DateTimeField(null=True)

2 个答案:

答案 0 :(得分:0)

一种方法是使用raw运行查询:

order.objects.raw("Select * From Order a Where date = (Select Max(b.date) From Order b Where a.company = b.company)")

请检查以下这些文档: https://docs.djangoproject.com/en/2.2/topics/db/sql/#mapping-query-fields-to-model-fields

答案 1 :(得分:0)

您是否要让每个公司Order对象具有最长日期?你可以尝试

Order.objects.all().order_by('-date').distinct('company')

这应该按查询集日期降序排列并返回第一个不同的公司