Django / Python无法解决的类型:complex()<络合物()

时间:2015-06-02 17:58:12

标签: python django

从教程学习Django和Python,大多数时候不同版本的Django或Python之间存在错误。

我遇到了这个问题"无法解决的类型:complex()<络合物()"因为这个:

def top_stories(top=180, consider=1000):
    latest_stories = Story.objects.all().order_by('-created_at')[:consider]
    ranked_stories = sorted([(score(story), story) for story in latest_stories], reverse=True)
    return [story for score, story in ranked_stories][:top]

我找到了一个解决方案:使用关键功能为商店提供分数:     ranking_stories =已排序(latest_stories,key = score,reverse = True)     return ranking_stories [:top]

但是,由于版本较旧,这也没有用,所以有人告诉我试试

"是的,它已经改变了一点。现在你必须为你的排序指定一个lambda,因为key必须是可调用的东西。使用lambda使得它可以在您正在使用的可迭代对象的每个项目上调用 - 确保该键可以在您自己的类的任何类型的对象实例中使用。

尝试以下方法:

ranked_stories = sorted(latest_stories, key=lambda story: store.score(), reverse=True)

你可以使用得分对象使它变得如此复杂,这就是lambda"

的美丽

这也没有用。它给了我一个错误说"' QuerySet'对象没有属性' points'"。

我的模型确实有一个分数变量,我不知道为什么它会对我大喊大叫。有人能看出我的代码出了什么问题吗?

这是views.py代码:

import datetime

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.utils.timezone import utc
from django.contrib.auth.decorators import login_required

from stories.models import Story


def score(story, gravity=1.8, timebase=120):
    points = (story.points - 1)**0.8
    now = datetime.datetime.utcnow().replace(tzinfo=utc)
    age = int((now - story.created_at).total_seconds())/60
    return points/(age+timebase)**1.8

def top_stories(top=180, consider=1000):
    latest_stories = Story.objects.all().order_by('-created_at')[:consider]
    ranked_stories = sorted(latest_stories, key=lambda story:    latest_stories.points, reverse=True)
    return ranked_stories[:top]

def index(requet):
    stories = top_stories(top = 30)
    response ='''

    <html>
    <head>
        <title>Tuts+  News</title>
    </head>
    <body>
        <ol>

        </ol>

    </body>
    </html>




    ''' % '\n'.join(['<li> %s </li>' % stories.title for story in stories])
    return HttpResponse(response)

这是我的models.py代码:

from django.db import models
from urllib.parse import urlparse
from django.contrib.auth.models import User

class Story(models.Model):
    title = models.CharField(max_length = 200)
    url = models.URLField()
    points = models.IntegerField(default = 1)
    moderator = models.ForeignKey(User, default = '')
    created_at = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now = True)

    def __str__(self):
        return self.title

    @property
    def domain(self):
        return urlparse(self.url).netloc

    class Meta:
        verbose_name_plural = 'stories'

1 个答案:

答案 0 :(得分:0)

latest_storiesQuerySet。你可能想要使用lambda参数。

key=lambda story: story.points