2016-02-27 77 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