【发布时间】:2019-12-10 01:29:13
【问题描述】:
我有 models.py 代表如下:
from django.db import models
from django.db.models.signals import post_save
# Create your models here.
from django.http import request
class Task(models.Model):
created = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=512)
cost = models.DecimalField(decimal_places=2, max_digits=8)
def __str__(self):
return self.description + "-" + str(self.cost)
class TaskStatus(models.Model):
STATUS = (
(0, 'Created'),
(1, 'Taken'),
(2, 'Reissued'),
(3, 'On approve'),
(4, 'Done'),
)
task_id = models.IntegerField()
created = models.DateTimeField(auto_now_add=True)
status = models.PositiveSmallIntegerField(choices=STATUS, default=0)
def __str__(self):
return str(self.task_id) + ' ' + str(self.status)
def create_status(sender, instance, **kwargs):
if kwargs['created']:
task_status = TaskStatus.objects.create(task_id=instance.id)
post_save.connect(create_status, sender=Task)
我必须将该 mysql 查询转换为 django ORM 查询。我在这上面堆了 2 天。请建议我一些有用的链接来了解如何执行。
SELECT t.created,
t.description,
(SELECT MAX(s.created)
FROM task_statuses s
WHERE s.task_id = t.id AND s.status_type = 3
GROUP BY s.task_id) as task_on_approve
FROM task t
WHERE t.created BETWEEN '2019-04-01 00:00:00' AND '2019-04-30 23:59:59';
【问题讨论】: