2017-03-20 77 views
0

我想要做的是拉出所有拥有超过12名球员的球队。我被告知我需要使用.annotate和count来完成它。我在看https://docs.djangoproject.com/en/1.10/topics/db/aggregation/,但不知道如何做一个查询,并将其放入HTML。我假设拉一个查询,然后做HTML,使其做正确的计数。使用注释django

对于assignmnt的问题是......显示已经有12个或更多玩家,过去和现在的所有球队。 (提示:查找Django的注释功能。)

views.py 

from django.shortcuts import render, redirect 
from .models import League, Team, Player 

from . import team_maker 

def index(request): 
    context = { 
     "leagues": League.objects.all(), 
     "teams": Team.objects.all(), 
     "players": Player.objects.all(), 
     "baseball" : League.objects.filter(sport__contains="Baseball"), 
     "women" : League.objects.filter(name__contains="Womens'"), 
     "ice" : League.objects.filter(sport__contains="ice"), 
     "nofootball" : League.objects.exclude(sport__contains="football"), 
     "conferences" : League.objects.filter(name__contains="conference"), 
     "atlantic": League.objects.filter(name__contains="Atlantic"), 
     "teamdallas": Team.objects.filter(location__contains="Dallas"), 
     "raptor": Team.objects.filter(team_name__contains="Raptor"), 
     "cityloc": Team.objects.filter(location__contains="city"), 
     "startT": Team.objects.filter(team_name__startswith="T"), 
     "abc": Team.objects.order_by('location'), 
     "cba": Team.objects.order_by('location').reverse(), 
     "cooper": Player.objects.filter(last_name="Cooper"), 
     "joshua": Player.objects.filter(first_name="Joshua"), 
     "nocooper": Player.objects.filter(last_name="Cooper").exclude(first_name="Joshua"), 
     "wyatt": Player.objects.filter(first_name="Alexander")|Player.objects.filter(first_name="Wyatt"), 
     "atlanticsoccer" : Team.objects.filter(league__name__contains='atlantic', league__sport__contains="soccer"), 
     "bostonp" : Player.objects.filter(curr_team__team_name__contains='Penguins'), 
     "icbc" : Player.objects.filter(curr_team__league__name__contains='International Collegiate Baseball '), 
     "footballlopez" : Player.objects.filter(curr_team__league__name__contains="American Conference of Amateur Football", last_name__contains="lopez"), 
     "footballplayer" : Player.objects.filter(curr_team__league__sport__contains="football"), 
     "sophia" : Team.objects.filter(curr_players__first_name__contains='sophia'), 
     "sophiale" :League.objects.filter(teams__curr_players__first_name__contains='sophia'), 
     "notrough" :Player.objects.filter(last_name__contains='Flores').exclude(curr_team__team_name__contains='rough'), 
     "sevans" :Team.objects.filter(all_players__first_name__contains='Samuel'), 
     "Tiger" :Player.objects.filter(all_teams__team_name__contains='Tiger'), 
     "vikings":Player.objects.filter(all_teams__team_name__contains='vikings'), 
     "jgray":Team.objects.filter(all_players__first_name__contains='Jacob').exclude(team_name__contains='colts'), 
     "joshua":Player.objects.filter(all_teams__league__name__contains='Atlantic Federation of Amateur Baseball')&Player.objects.filter(first_name='Joshua'), 
     "num12":Player.objects.annotate(num13=) 



    } 

     return render(request, "leagues/index.html", context) 

def make_data(request): 
    team_maker.gen_leagues(10) 
    team_maker.gen_teams(50) 
    team_maker.gen_players(200) 

    return redirect("index") 

models.py 

from django.db import models 

class League(models.Model): 
    name = models.CharField(max_length=50) 
    sport = models.CharField(max_length=15) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

class Team(models.Model): 
    location = models.CharField(max_length=50) 
    team_name = models.CharField(max_length=50) 
    league = models.ForeignKey(League, related_name="teams") 

class Player(models.Model): 
    first_name = models.CharField(max_length=15) 
    last_name = models.CharField(max_length=15) 
    curr_team = models.ForeignKey(Team, related_name="curr_players") 
    all_teams = models.ManyToManyField(Team, related_name="all_players") 
+0

'Team.objects.annotate(C =计数( '播放'))。过滤器(s__gt = 12' )' –

回答

1
Team.objects.annotate(c=Count('all_players')).filter(c__gt=12') 

这是什么会做的是:

  1. 在每个记录/行中的Team模型/表将追加/注释一个新的价值。 c之一。你可以随便命名。这个c将是player这个row/record与之相关联的数量。

  2. 然后,由于c值在所有行中都有注释,因此它将过滤这些值并获取大于12(player s)的所有行。

+0

玩家引发错误shoudl它是all_players无法解析关键字 '播放器' 入字段。选择是:all_players,curr_players,id,联盟,league_id,位置,球队名称 –

+0

现在呢?它现在工作吗? –

+0

再次值得一百万 –