2013-01-16 30 views
1

想想這些: 這裏是一個函數,的Django如何ORDER_BY臨時場,動態創建領域

def calculate(model): 
    model.tempfield = 1 

這個函數將保存在這個模型 一個臨時場,您可以在使用model.tempfield無處不在 但如果它是一個查詢集,在order_by後這些temp字段將丟失

如何order_by這些temp字段在queryset中?

我有2個型號:

Class A(models.Model): 
    name = models.CharField(maxlength=100) 

Class Log_Of_A(models.Model): 
    clicks = models.IntegerField() 
    a = models.ForeignKey(A) 
    date = models.DateField(db_index=True) 

和按日期計算的日誌

def createlog(request): 
    start = request.GET.get("start") 
    end = request.GET.get("end") 
    all_A = A.objects.all() 
    for a in all_A: 
     logs=Log_Of_A.objects.filter(a=a,date__gt=start,date__lt=end) 
     statistics = logs.aggregate(Sum("clicks")) 
     a.clicks = statistics["clicks__sum"] 
    all_A.order_by("clicks") 
    return all_A 

如何ORDER_BY臨時野戰

+1

是, 確實如此。 order_by對數據庫進行新的查詢,因此會丟失任何手動註釋。你的問題是什麼? –

+0

感謝您的審查,我編輯了我的問題 – rrezyk

+0

隨着新的解釋你的問題現在很清楚:) – Teisman

回答

1

試試這個:

import operator 

def createlog(request): 
    start = request.GET.get("start") 
    end = request.GET.get("end") 
    all_A = A.objects.all() 
    for a in all_A: 
    logs=Log_Of_A.objects.filter(a=a,date__gt=start,date__lt=end) 
    statistics = logs.aggregate(Sum("clicks")) 
    a.clicks = statistics["clicks__sum"] 
    sorted = sorted(all_A, key=operator.attrgetter('clicks'), reverse=True) 
    return sorted 
+0

感謝您的幫助!它的工作原理! – rrezyk