成形Django的查询集为一个一对多关系
问题描述:
我有一个Django模型限定相片:成形Django的查询集为一个一对多关系
class Pic(models.Model):
image = models.ImageField(upload_to=upload_pic_to_location, storage=OverwriteStorage())
owner = models.ForeignKey(User)
upload_time = models.DateTimeField(db_index=True, auto_now_add=True)
而另一个定义消息上面的照片可以被发送为:
class PicMessage(models.Model):
which_pic = models.ForeignKey(Pic)
sending_time = models.DateTimeField(auto_now_add=True)
即相同的图片可以作为不同的消息多次发送。什么是最有效的方式来找到最近PicMessage
由给定user
发送?
我想这一点:PicMessage.objects.filter(which_pic__in=Pic.objects.filter(owner=self.request.user)).latest('sending_time')
答
PicMessage.objects.filter(which_pic__owner=user).order_by('-sending_time').first()
快速的问题:将做'最新的( 'sending_time')'相当于性能明智的做'ORDER_BY( ' - sending_time')第一。 ()'? –
我相信他们导致相同的SQL,如果你担心要优化数据库性能,你需要启用SQL日志,然后使用EXPLAIN sql语法来查看你的数据库索引是否被这些查询使用等等。转换为2个简单的SQL查询,我的翻译为单一但加入。哪一个运行速度更快,需要分析您的特定数据。 – serg