2009-12-20 115 views
0

我有模式是這樣的:試圖排序查詢集

class Kaart(models.Model): 
    name = models.CharField(max_length=200, verbose_name="Kaardi peakiri", help_text="Sisesta kaardi pealkiri (maksimum tähemärkide arv on 38)", blank=False, null=False) 
    url = models.CharField(max_length=200, blank=False, null=False, verbose_name="Asukoha URL", help_text="Täisasukoht (http://www.domeen.ee/kaart/)") 
    kirjeldus = models.TextField(max_length=500, verbose_name="Kommentaar", help_text="Informatsioon/viide tegijale (mitte kohustuslik)") 
    date_added = models.DateField(help_text="lisamis kuupäev", verbose_name="Kuupäev", blank=False, null=False, default=datetime.date.today()) 
    neg = models.PositiveIntegerField(default=0) 
    pos = models.PositiveIntegerField(default=0) 
    def diff(self): 
     return self.pos - self.neg 

我的看法 - 注意註釋掉部分:

def index(request): 
    #a = Kaart.objects.all() 
    a = Kaart.objects.all().order_by('diff') 
    return render_to_response('index.html', { 
     'k':a, 
    }, context_instance=RequestContext(request)) 

和模板:

{% for kaart in k %} 
<tr> 
     <td class="tc"><span class="nr">1</span></td> 
     <td> 
       <a href="#">{{ kaart.name }}</a> 
       <a href="{{ kaart.url }}" id="full-url" title="k.kirjeldus">URL</a> 
     </td> 
     <td class="tc">{{ kaart.shortdate }}</td> 
     <td class="tr"> 
       <span class="pos">{{ kaart.diff }}</span> 
       <a href="#"><img src="hinda/img/thumbs-up.jpg" /></a> 
       <a href="#"><img src="hinda/img/thumbs-down.jpg" /></a> 
     </td> 
</tr> 
{% endfor %} 

和錯誤我得到的結果是: 呈現時捕獲到異常:無法將關鍵字'diff'解析爲字段。選擇是:date_added,id,kirjeldus,名稱,neg,pos,url。

突出顯示的行是

{%用於在K%該地圖}

有趣的事情是,當我在評論部分,多數民衆贊成ATM註釋掉並註釋掉排序查詢集,然後一切工作正常。這裏有什麼問題?

我怎樣才能得到這個查詢排序的差異?

Alan。

回答

1

你將不得不做這樣的,我相信:

a = Kaart.objects.all().extra(
    select = {'diff': 'pos - neg'} 
).order_by('diff') 
0

order_by參數必須是在你的數據庫SQL解釋解析。您的diff方法使用Python,因此在SQL級別上不可用。巴雷西的回答看起來不錯。