繁体   English   中英

Django / Python TypeError不可排序的类型:float()<HighscoreEasy()

[英]Django/Python TypeError unorderable types: float() < HighscoreEasy()

我将工作中的Django-App复制到了新项目中,但是现在有一个我无法解决的问题。

我将检查新播放时间是否低于旧播放时间。

if playtime < HighscoreEasy.objects.filter(player=player).order_by('score').first().score:

我期望这样的事情:

>>> HighscoreEasy.objects.filter(player=2).order_by('score').first().score
8.9754946231842
>>> playtime = 10.0
>>> playtime < HighscoreEasy.objects.filter(player=2).order_by('score').first().score
False
Environment:


Request Method: POST
Request URL: https://www.maik-kusmat.de/kopfrechnen/results/

Django Version: 1.11.5
Python Version: 3.5.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'accounts',
 'home',
 'contact',
 'kopfrechnen',
 'braces']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.locale.LocaleMiddleware']



Traceback:

File "/home/pi/Dev/mkenergy/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/pi/Dev/mkenergy/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/pi/Dev/mkenergy/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/pi/Dev/mkenergy/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/pi/Dev/mkenergy/src/kopfrechnen/views.py" in kopfrechnen_results
  168.                         if playtime < HighscoreEasy.objects.filter(player=player).order_by('score').first().score:

Exception Type: TypeError at /kopfrechnen/results/
Exception Value: unorderable types: float() < HighscoreEasy()

这是我的代码中有问题的代码段:

def kopfrechnen_results(request):
    end_time = time.time()
    if 'start_time' in request.session:
        start_time = request.session['start_time']
    else:
        template = loader.get_template('kopfrechnen/kopfrechnen.html')
        context = {'error': 'Starte ein neues Spiel immer von hier.'}
        return HttpResponse(template.render(context, request))

    if 'tasks' in request.session:
        tasks = request.session['tasks']
    else:
        template = loader.get_template('kopfrechnen/kopfrechnen.html')
        context = {'error': 'Starte ein neues Spiel immer von hier.'}
        return HttpResponse(template.render(context, request))

    if 'difficulty' in request.session:
        difficulty = request.session['difficulty']
    else:
        template = loader.get_template('kopfrechnen/kopfrechnen.html')
        context = {'error': 'Starten Sie ein neues Spiel von hier.'}
        return HttpResponse(template.render(context, request))

    del request.session['start_time']
    del request.session['tasks']
    del request.session['difficulty']
    message1 = ""
    message2 = ""
    player = request.user
    playtime = end_time - start_time
    template = loader.get_template('kopfrechnen/kopfrechnen_results.html')
    answers = []
    inputs = []
    right_answers = 0
    for i in range(5):
        if request.POST.get('task' + str(i)):
            inputs += [int(request.POST.get('task' + str(i)))]
        else:
            inputs += [999999]
        answers += [int(tasks[i].get('c'))]
        if inputs[i] == answers[i]:
            right_answers += 1
    success = False
    if right_answers == 5:
        success = True
        if difficulty == 'easy':
            try:
                if HighscoreEasy.objects.order_by('score').first() is not None:
                    if playtime < HighscoreEasy.objects.values_list('score', flat=True)[0]:
                        message1 = "Neue absolute Bestzeit!"
                    elif HighscoreEasy.objects.filter(player=player).order_by('score').first() is not None:
                        if playtime < HighscoreEasy.objects.filter(player=player).order_by('score').first().score:
                            message1 = "Neue persönliche Bestzeit!"
                    else:
                        message1 = ""
                else:
                    message1 = "Neue absolute Bestzeit!"
                place = HighscoreEasy.objects.filter(score__lt=playtime).values_list('score', flat=True).count() + 1
                if place > 10:
                    message2 = "Super, aber leider keine neue Bestzeit in der Top 10."
                elif place <= 10:
                    message2 = "Super, du bist auf Platz " + str(place) + " gelandet."
                try:
                    if HighscoreEasy.objects.get(player=player):
                        entry = HighscoreEasy.objects.get(player=player)
                        if playtime < entry.score:
                            entry.score = playtime
                            entry.created = timezone.now()
                            entry.save()
                        if playtime > entry.score:
                            message2 = " Du konntest dich leider nicht verbessern."
                except:
                    entry = HighscoreEasy(score=playtime, player=player)
                    entry.save()
            except IndexError:
                message1 = "Fehler! Bitte melde diesen Fehler"

我的模特:

class HighscoreEasy(models.Model):
    player = models.ForeignKey(settings.AUTH_USER_MODEL, default=settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
                               verbose_name="player_easy")
    created = models.DateTimeField(default=timezone.now)
    score = models.FloatField()

    class Meta:
        ordering = ["score"]

我解决了这个问题。

我已经为我的Usermodel定义了str属性

def __str__(self):
    return self.user.username

但是在我的数据库中,我将通过ID获取用户。 愚蠢,但发生了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM