【问题标题】:Trying to sort queryset尝试对查询集进行排序
【发布时间】:2009-12-20 18:40:18
【问题描述】:

我有这样的模型:

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。

突出显示的行是

{% for kaart in k %}

有趣的是,当我在注释掉 atm 的部分中注释并注释掉排序的查询集时,一切正常。这里有什么问题?

我怎样才能让这个查询按差异排序?

艾伦。

【问题讨论】:

    标签: django sorting django-queryset


    【解决方案1】:

    我相信你必须这样做:

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

    【讨论】:

      【解决方案2】:

      order_by 参数必须可由数据库中的 SQL 解释器解析。您的 diff 方法在 Python 中,因此在 SQL 级别不可用。 Baresi 的回答看起来不错。

      【讨论】:

        猜你喜欢
        • 2014-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多