从教程学习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'
答案 0 :(得分:0)
latest_stories
是QuerySet
。你可能想要使用lambda参数。
key=lambda story: story.points