2013-03-15 71 views
0

我有以下兩種模式:複雜的Django DB訂貨

class OrderItem(models.Model): 
    order = models.ForeignKey(Order, related_name='items') 
    title = models.ForeignKey(Title, related_name='order_items') 

class OrderNotes(models.Model): 
    order_item = models.ForeignKey('OrderItem', blank=True, null=True) 
    timestamp = models.DateTimeField(auto_now_add=True) 
    is_active = models.BooleanField(default=True) 

由最近OrderNote是活動我將如何排序OrderItem S'

在pseudo_code:

OrderItem.objects.order_by('ordernotes_set.order_by('is_active', '-timestamp')) 

回答

0

我認爲你可以使用註釋來處理這個相當容易。 https://docs.djangoproject.com/en/dev/topics/db/aggregation/#following-relationships-backwards

from django.db.models import Max 
OrderItems.annotate(newest_note_time=Max('ordernotes__timestamp')) 
    .order_by('-ordernotes__is_active', '-newest_note_time') 
+0

看起來不是這樣的作品。另外,這不考慮「is_active」。 – David542 2013-03-16 00:09:35

+0

爲Max()函數添加了導入。它應該工作。我之前在訂購時間戳時做過類似的註釋。我目前無法訪問python環境進行測試,但請查看註釋和聚合的文檔。您應該能夠爲is_active設置第二個註釋並按順序進行排序。 – 2013-03-16 00:15:19