我想要的是能够通过下拉按特定属性对棒球运动员进行排序,并在我的模板中将它们显示为自举牌
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来说相当新。我觉得自定义模板或过滤器标签可能是我正在寻找的,但如果我能够在正确的方向上推动,那将非常感激。
很酷的主意。所以我认为你需要为你想要的每个属性制作过滤器。要从下拉列表中获取属性,您可以使用表单或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语句。您甚至可以为更复杂的查询链接过滤器。希望这可以帮助。