我正在头痛地写一个查询:slight_smile:这是我的模型:
`class Mission(models.Model):
machine = models.ForeignKey(Machine, on_delete=models.CASCADE, related_name="missions")
start_dt = models.DateTimeField(null=False)
longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
@cached_property
def timezone(self) -> datetime.tzinfo:
timezone_str = get_tz(float(self.longitude), float(self.latitude))
return pytz.timezone(timezone_str)`
和
`class Machine(models.Model):
name = models.CharField(max_length=12, null=False, unique=True)
created_at = models.DateTimeField(_("created at"), auto_now_add=True)
updated_at = models.DateTimeField(_("updated at"), auto_now=True)`
我想对所有机器进行查询,并为每台机器创建一个last_使命字段,其中包含我的最后一个使命。
例如:machine.last_mission.timezone ...
.我完全被django ORM卡住了。
这是我的postgres查询,它并不完全符合我的要求,因为没有last_使命键,也没有model属性。
非常感谢你的帮助:slight_smile:select * from machines_machine machine, missions_mission mission where (mission.machine_id, mission.start_dt) in (select mission.machine_id as machine_id, Max(mission.start_dt) as start_dt from missions_mission mission group by mission.machine_id order by mission.machine_id)
1条答案
按热度按时间xdnvmnnf1#
你可以在一个子查询中用最新的使命注解一个json对象:
它应该返回如下内容:
生成的SQL查询是: