2009-12-20 14 views
0

Je modèle comme ceci:Essayer de trier queryset

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 

mon avis - remarquez l'a commenté une partie:

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)) 

et modèle:

{% 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 %} 

Et l'erreur i get est: Capture d'une exception lors du rendu: impossible de résoudre le mot clé 'diff' en champ. Les choix sont: date_added, id, kirjeldus, nom, neg, pos, url.

mis en évidence la ligne est

{% pour kaart in k%}

chose intéressante est que quand je commente dans la partie des thats commenté atm et commentez queryset alors tout est trié fonctionne bien. Qu'est-ce qui ne va pas ici?

comment puis-je obtenir cette requête triée par diff?

Alan.

Répondre

1

Vous devrez le faire comme cela, je crois:

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

Les order_by arguments doivent être résolus par l'interpréteur SQL dans votre base de données. Votre méthode diff est en Python et n'est donc pas disponible au niveau SQL. La réponse de Baresi semble bonne.