我想要的是能够通过下拉列表按特定属性对棒球运动员进行排序,并将其显示为我的模板中的引导卡
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还是相当陌生。我感觉到自定义模板或过滤器标签可能就是我想要的,但是如果我能朝正确的方向发展,将不胜感激。
答案 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语句。您甚至可以为更复杂的查询链接过滤器。希望这会有所帮助。