Попытка отсортировать набор запросов - PullRequest
0 голосов
/ 20 декабря 2009

У меня есть такая модель:

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, name, neg, pos, url.

выделенная строка -

{% для каарта в к%}

Интересно то, что когда я комментирую часть, которая закомментирует atm и комментирует отсортированный набор запросов, тогда все работает нормально. Что здесь не так?

как мне отсортировать этот запрос по diff?

Алан.

Ответы [ 2 ]

1 голос
/ 20 декабря 2009

Тебе придется сделать это так, я считаю:

a = Kaart.objects.all().extra(
    select = {'diff': 'pos - neg'}
).order_by('diff')
0 голосов
/ 20 декабря 2009

Аргументы order_by должны быть разрешены интерпретатором SQL в вашей базе данных. Ваш метод diff написан на Python и поэтому недоступен на уровне SQL. Ответ Бареси выглядит хорошо.

...