Django/Python unorderable types: complex() < complex() -


'm learning django , python tutorial, , of time there bugs between different version of django or python.

i ran problem "unorderable types: complex() < complex()" because of :

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

i found solution said: use key function give stores score: ranked_stories = sorted(latest_stories, key=score, reverse=true) return ranked_stories[:top]

but, wasn't working because of older version, told me try

"yes, has changed bit. have specify lambda sorting because key has callable. using lambda makes callable on every item of iterable object using - ensuring key can used across kind of object instances own classes.

try following:

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

you may make complex want using score object , that's beauty of lambda"

this didn't work. gave me error saying "'queryset' object has no attribute 'points'".

my model have points variable, don't under stand why it's yelling @ me. see what's wrong code?

here views.py code:

import datetime  django.shortcuts import render, get_object_or_404 django.http import httpresponseredirect, httpresponse django.utils.timezone import utc django.contrib.auth.decorators import login_required  stories.models import story   def score(story, gravity=1.8, timebase=120):     points = (story.points - 1)**0.8     = 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 story in stories])     return httpresponse(response) 

and here models.py code:

from django.db import models urllib.parse import urlparse 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' 

latest_stories queryset. meant use lambda argument instead.

key=lambda story: story.points 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -