如何在模板中按模型属性订购Queryset

问题描述 投票:0回答:1

我想要的是能够通过下拉按特定属性对棒球运动员进行排序,并在我的模板中将它们显示为自举牌

views.朋友

from django.shortcuts import render
from stats.models import *

def index(request):
    player_list = Player.objects.all()
    context_dict = {'player_list':player_list}
    return render(request, 'stats/index.html', context=context_dict)

models.朋友

from django.db import models

class Player(models.Model):

    picture = models.ImageField(blank=True)
    name = models.CharField(max_length=24)
    number = models.IntegerField(unique=True)
    jersey_name = models.CharField(max_length=20)
    games_played = models.IntegerField()
    at_bats = models.IntegerField(default=0)
    average = models.DecimalField(max_digits=4, decimal_places=3)
    hits = models.IntegerField()
    doubles = models.IntegerField()
    triples = models.IntegerField()
    home_runs = models.IntegerField()
    runs = models.IntegerField()
    rbis = models.IntegerField()

    def __str__(self):
        return self.name   

这就是我想象的标签在我的模板中的样子

{% for player in player_list.filter_by_some_attribute %}
   HTML here
{% endfor %}

我在SO和Django文档上找到了一个解决方案,但我对Django来说相当新。我觉得自定义模板或过滤器标签可能是我正在寻找的,但如果我能够在正确的方向上推动,那将非常感激。

python django
1个回答
1
投票

很酷的主意。所以我认为你需要为你想要的每个属性制作过滤器。要从下拉列表中获取属性,您可以使用表单或ajax将属性发送到视图。然后在您的视图中,您将为数据库运行过滤器以返回对象。然后,您可以在模板中显示该对象。假设您想要玩超过1000场比赛的玩家。您的视图可能如下所示:

from django.shortcuts import render

def index(request):
    if request.POST['games_played']==1000:
        player_list = Player.objects.filter(games_played__gte=1000).order_by('name')
    else:
        player_list = Player.objects.all().order_by('name')

    context_dict = {'player_list':player_list}

    return render(request, 'stats/index.html', context=context_dict)

假设您通过POST请求发送数据。看起来你需要很多过滤器和if语句。您甚至可以为更复杂的查询链接过滤器。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.