2017-03-20 16 views
0

私がしたいことは、12人以上のプレーヤーを持つすべてのチームを引き抜くことです。私はそれを行うためにカウントと。注釈を使用する必要があると言われています。私はhttps://docs.djangoproject.com/en/1.10/topics/db/aggregation/を見ていますが、それについての質問をしてhtmlに入れる方法を理解していません。私はクエリを引っ張って、それが正しいカウントを行うようにHTMLを行うと仮定しています。annotate djangoと一緒に作業する

割り当て先の質問は...過去12人以上のプレイヤーを持つすべてのチームを表示します。 (ヒント:機能に注釈を付けるジャンゴを見上げて)

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') 

これはどうなるのかは、次のとおりです。

Teamモデル/テーブル内の各レコード/行で
  1. それは/注釈を追加します新しい価値。 cです。あなたは何でも好きな名前を付けることができます。このcの番号はplayerです。このrow/recordに関連付けられています。

  2. 次に、cの値はすべての行に注釈が付けられているため、フィルタリングしてcより大きい12(players)を持つすべての行を取得します。

+0

プレイヤーはそれがall_playersキーワード解決できないことshoudlエラースロー 'フィールドにプレーヤーを'。選択肢はall_players、curr_players、id、league、league_id、location、team_name –

+0

現在はどうなっていますか?それは今働きますか? –

+0

もう一度百万の価値がある –

関連する問題