如何在模板中按模型属性排序查询集

时间:2018-06-22 02:44:19

标签: python django

我想要的是能够通过下拉列表按特定属性对棒球运动员进行排序,并将其显示为我的模板中的引导卡

Views.py

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.py

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还是相当陌生。我感觉到自定义模板或过滤器标签可能就是我想要的,但是如果我能朝正确的方向发展,将不胜感激。

1 个答案:

答案 0 :(得分: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语句。您甚至可以为更复杂的查询链接过滤器。希望这会有所帮助。