我在django中有一个简单的模型
from django.conf import settings
from django.db import models
class Message(models.Model):
message_num = models.IntegerField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
name = models.CharField(max_length=50)
creation_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return ''.join([
str(self.id),
' ',
str(self.message_num),
' ',
self.name
])
class MessageVersion(models.Model):
message_id = models.ForeignKey(Message)
version_num = models.PositiveIntegerField()
text = models.TextField()
creation_time = models.DateTimeField(auto_now_add=True)
我想为Message选择最新的MessageVersion。在纯SQL中它很简单
select res1.*, res2.* from homepage_messageversion res1
join (
select message_id_id, max(version_num) as version_num
from homepage_messageversion
group by message_id_id
) res2
on (res1.message_id_id = res2.message_id_id)
and (res1.version_num = res2.version_num);
如何纠正将此SQL请求转发给Django ORM请求?
答案 0 :(得分:1)
Django ORM也很简单。你可以这样做。
首先获取您想要最新VersionMessage的Message对象。例如,我将获取id 1的消息对象。
message = Message.objects.get(id=1)
现在获取上述消息的所有消息版本,并按创建时间排序。
message_versions = MessageVersion.objects.filter(message_id=message).order_by('-created')
现在您拥有所有消息版本,现在获得最新版本
message_version_latest = message_versions[0]
希望得到这个帮助。