2016-02-27 73 views
0

我有一个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')

回答

0
PicMessage.objects.filter(which_pic__owner=user).order_by('-sending_time').first() 
+0

快速的问题:将做'最新的( 'sending_time')'相当于性能明智的做'ORDER_BY( ' - sending_time')第一。 ()'? –

+1

我相信他们导致相同的SQL,如果你担心要优化数据库性能,你需要启用SQL日志,然后使用EXPLAIN sql语法来查看你的数据库索引是否被这些查询使用等等。转换为2个简单的SQL查询,我的翻译为单一但加入。哪一个运行速度更快,需要分析您的特定数据。 – serg