initial commit. displays simple hierarchy and lists of models. includes fixtures for initial data.

This commit is contained in:
2021-11-07 14:05:07 -06:00
parent a253c38bf0
commit 0f5c7d27e6
54 changed files with 1398 additions and 0 deletions

92
.gitignore vendored Normal file
View File

@@ -0,0 +1,92 @@
# Django #
*.log
*.pot
*.pyc
__pycache__
db.sqlite3
media
# Backup files #
*.bak
# If you are using PyCharm #
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/gradle.xml
.idea/**/libraries
*.iws /out/
.idea/
# Python #
*.py[cod]
*$py.class
# Distribution / packaging
.Python build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
.pytest_cache/
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# pyenv
.python-version
# celery
celerybeat-schedule.*
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# mkdocs documentation
/site
# mypy
.mypy_cache/
scripts/
/.idea/benchcoach.iml

0
benchcoach/__init__.py Normal file
View File

16
benchcoach/asgi.py Normal file
View File

@@ -0,0 +1,16 @@
"""
ASGI config for events project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'events.settings')
application = get_asgi_application()

135
benchcoach/settings.py Normal file
View File

@@ -0,0 +1,135 @@
"""
Django settings for events project.
Generated by 'django-admin startproject' using Django 3.2.6.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-qib_j&47o$5l3*gi7y#8#3pjh_88sfdqn@dmp&gx+2)&1nzmor'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ["smithers-ii.local", "127.0.0.1"]
# Application definition
INSTALLED_APPS = [
'events.apps.EventsConfig',
'teams.apps.TeamsConfig',
'venues.apps.VenuesConfig',
'players.apps.PlayersConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap5'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'benchcoach.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates']
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'benchcoach.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

29
benchcoach/urls.py Normal file
View File

@@ -0,0 +1,29 @@
"""events URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from .views import welcome
urlpatterns = [
path('', welcome),
path('admin/', admin.site.urls),
path('events/', include('events.urls')),
path('teams/', include('teams.urls')),
path('venues/', include('venues.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

6
benchcoach/views.py Normal file
View File

@@ -0,0 +1,6 @@
from django.http import HttpResponse
from django.shortcuts import render
def welcome(request):
pages = ['schedule', 'teams_list', 'venues_list']
return render(request,'home.html',{'pages':pages})

16
benchcoach/wsgi.py Normal file
View File

@@ -0,0 +1,16 @@
"""
WSGI config for events project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'events.settings')
application = get_wsgi_application()

0
events/__init__.py Normal file
View File

7
events/admin.py Normal file
View File

@@ -0,0 +1,7 @@
from django.contrib import admin
from .models import Event, Availability
# Register your models here.
admin.site.register(Event)
admin.site.register(Availability)

6
events/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class EventsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'events'

View File

@@ -0,0 +1,245 @@
- model: events.event
pk: 1
fields:
start: '2020-08-24T16:00:01'
away_team_id: '1'
home_team_id: '7'
venue_id: '15'
- model: events.event
pk: 2
fields:
start: '2020-08-24T19:00:02'
away_team_id: '7'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 3
fields:
start: '2020-08-24T22:00:01'
away_team_id: '12'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 4
fields:
start: '2020-08-25T00:00:01'
away_team_id: '12'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 5
fields:
start: '2020-08-25T01:00:02'
away_team_id: '1'
home_team_id: '2'
venue_id: '10'
- model: events.event
pk: 6
fields:
start: '2020-08-25T04:00:00'
away_team_id: '6'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 7
fields:
start: '2020-08-25T07:00:03'
away_team_id: '1'
home_team_id: '6'
venue_id: '8'
- model: events.event
pk: 8
fields:
start: '2020-08-25T10:00:03'
away_team_id: '11'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 9
fields:
start: '2020-08-25T13:00:01'
away_team_id: '7'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 10
fields:
start: '2020-08-25T16:00:00'
away_team_id: '1'
home_team_id: '7'
venue_id: '15'
- model: events.event
pk: 11
fields:
start: '2020-08-25T19:00:03'
away_team_id: '1'
home_team_id: '16'
venue_id: '24'
- model: events.event
pk: 12
fields:
start: '2020-08-26T00:00:03'
away_team_id: '6'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 13
fields:
start: '2020-08-26T01:00:01'
away_team_id: '1'
home_team_id: '12'
venue_id: '20'
- model: events.event
pk: 14
fields:
start: '2020-08-26T04:00:01'
away_team_id: '1'
home_team_id: '2'
venue_id: '10'
- model: events.event
pk: 15
fields:
start: '2020-08-26T07:00:02'
away_team_id: '1'
home_team_id: '4'
venue_id: '23'
- model: events.event
pk: 16
fields:
start: '2020-08-26T13:00:02'
away_team_id: '11'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 17
fields:
start: '2020-08-26T16:00:00'
away_team_id: '15'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 18
fields:
start: '2020-08-26T19:00:03'
away_team_id: '16'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 19
fields:
start: '2020-08-27T00:00:02'
away_team_id: '11'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 20
fields:
start: '2020-08-27T01:00:00'
away_team_id: '15'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 21
fields:
start: '2020-08-27T14:00:02'
away_team_id: '1'
home_team_id: '2'
venue_id: '10'
- model: events.event
pk: 22
fields:
start: '2020-08-27T17:00:01'
away_team_id: '7'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 23
fields:
start: '2020-08-27T23:00:02'
away_team_id: '1'
home_team_id: '7'
venue_id: '15'
- model: events.event
pk: 24
fields:
start: '2020-08-28T00:00:02'
away_team_id: '1'
home_team_id: '7'
venue_id: '15'
- model: events.event
pk: 25
fields:
start: '2021-10-26T17:12:48'
away_team_id: '1'
home_team_id: '7'
venue_id: '15'
- model: events.event
pk: 26
fields:
start: '2020-08-28T05:00:05'
away_team_id: '1'
home_team_id: '20'
venue_id: '21'
- model: events.event
pk: 27
fields:
start: '2020-08-28T08:00:02'
away_team_id: '1'
home_team_id: '12'
venue_id: '20'
- model: events.event
pk: 28
fields:
start: '2020-08-28T11:00:06'
away_team_id: '1'
home_team_id: '11'
venue_id: '16'
- model: events.event
pk: 29
fields:
start: '2020-08-28T14:00:02'
away_team_id: '1'
home_team_id: '4'
venue_id: '23'
- model: events.event
pk: 30
fields:
start: '2020-08-28T17:00:05'
away_team_id: '1'
home_team_id: '6'
venue_id: '8'
- model: events.event
pk: 31
fields:
start: '2020-08-28T23:00:09'
away_team_id: '19'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 32
fields:
start: '2020-08-29T00:00:05'
away_team_id: '19'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 33
fields:
start: '2020-08-29T02:00:02'
away_team_id: '6'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 34
fields:
start: '2020-08-29T05:00:06'
away_team_id: '15'
home_team_id: '1'
venue_id: '4'
- model: events.event
pk: 35
fields:
start: '2020-08-29T13:00:06'
away_team_id: '8'
home_team_id: '1'
venue_id: '4'

View File

@@ -0,0 +1,60 @@
# Generated by Django 3.2.6 on 2021-11-07 17:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('venues', '0001_initial'),
('teams', '0001_initial'),
('players', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start', models.DateTimeField(null=True)),
('away_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='away_team', to='teams.team')),
('home_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='home_team', to='teams.team')),
('venue', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='venues.venue')),
],
),
migrations.CreateModel(
name='Season',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Positioning',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('position', models.CharField(choices=[('P', 'P'), ('C', 'C'), ('1B', '1B'), ('2B', '2B'), ('3B', '3B'), ('SS', 'SS'), ('LF', 'LF'), ('CF', 'CF'), ('RF', 'RF'), ('DH', 'DH'), ('EH', 'EH')], default=None, max_length=2, null=True)),
('order', models.IntegerField(default=None, null=True)),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.event')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='players.player')),
],
options={
'unique_together': {('player', 'event')},
},
),
migrations.CreateModel(
name='Availability',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('available', models.CharField(choices=[('Yes', 'YES'), ('No', 'NO'), ('Maybe', 'MAY'), ('Unknown', 'UNK')], default='UNK', max_length=7)),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.event')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='players.player')),
],
options={
'unique_together': {('event', 'player')},
},
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.2.6 on 2021-11-07 18:39
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('events', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='availability',
options={'verbose_name_plural': 'availabilities'},
),
]

View File

56
events/models.py Normal file
View File

@@ -0,0 +1,56 @@
from django.db import models
from venues.models import Venue
from teams.models import Team
from players.models import Player, StatLine
class Event(models.Model):
start = models.DateTimeField(null=True)
venue = models.ForeignKey(Venue, null=True, on_delete=models.CASCADE)
home_team = models.ForeignKey(Team, null=True,on_delete=models.CASCADE, related_name="home_team")
away_team = models.ForeignKey(Team, null=True,on_delete=models.CASCADE, related_name="away_team")
def __str__(self):
return f"{self.start:%Y-%m-%d %H:%M}"
class Availability(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
player = models.ForeignKey(Player, on_delete=models.CASCADE)
choices = [
('Yes', 'YES'),
('No', 'NO'),
('Maybe', 'MAY'),
('Unknown', 'UNK')
]
available = models.CharField(choices=choices, default='UNK',max_length = 7)
def __str__(self):
return f"{self.event}; {self.player}; {self.available}"
class Meta:
unique_together = ('event', 'player',)
verbose_name_plural = "availabilities"
class Positioning(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
positions = [
('P', 'P'),
('C', 'C'),
('1B', '1B'),
('2B', '2B'),
('3B', '3B'),
('SS', 'SS'),
('LF', 'LF'),
('CF', 'CF'),
('RF', 'RF'),
('DH','DH'),
('EH','EH')
]
position = models.CharField(choices=positions, default=None, max_length=2, null=True)
order = models.IntegerField(default=None, null=True)
class Meta:
unique_together = ('player', 'event',)
class Season(models.Model):
name = models.CharField(max_length=50)

View File

@@ -0,0 +1,15 @@
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
<Title>Schedule</Title>
<h1>Schedule</h1>
<ol>
{% for event in events %}
<li>
{{ event.away_team.name }} vs. {{ event.home_team.name }} <br>
{{ event.start|date:"l, F j, Y g:i A" }} <br>
{{ event.venue.name }}
</li>
{% endfor %}
</ol>

10
events/urls.py Normal file
View File

@@ -0,0 +1,10 @@
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.root, name="root"),
path('schedule', views.schedule, name="schedule")
]

9
events/views.py Normal file
View File

@@ -0,0 +1,9 @@
from django.shortcuts import render, redirect
from .models import Event
def root(request):
return redirect('/events/schedule')
def schedule(request):
events = Event.objects.all()
return render(request, 'events/schedule.html', {'events': events})

BIN
identifier.sqlite Normal file

Binary file not shown.

22
manage.py Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benchcoach.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

0
players/__init__.py Normal file
View File

6
players/admin.py Normal file
View File

@@ -0,0 +1,6 @@
from django.contrib import admin
from .models import Player, StatLine
# Register your models here.
admin.site.register(Player)
admin.site.register(StatLine)

6
players/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class PlayersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'players'

View File

@@ -0,0 +1,84 @@
- model: players.player
pk: 1
fields:
first_name: Edric
last_name: Tosser
jersey_number: 1
- model: players.player
pk: 2
fields:
first_name: Paula
last_name: Mason
jersey_number: 2
- model: players.player
pk: 3
fields:
first_name: Declan
last_name: Suzanne
jersey_number: 3
- model: players.player
pk: 4
fields:
first_name: Baby
last_name: Triumphant
jersey_number: 4
- model: players.player
pk: 5
fields:
first_name: Joshua
last_name: Butt
jersey_number: 5
- model: players.player
pk: 6
fields:
first_name: Isaac
last_name: Johnson
jersey_number: 6
- model: players.player
pk: 7
fields:
first_name: Rivers
last_name: Rosa
jersey_number: 7
- model: players.player
pk: 8
fields:
first_name: Lou
last_name: Roseheart
jersey_number: 8
- model: players.player
pk: 9
fields:
first_name: Wesley
last_name: Poole
jersey_number: 9
- model: players.player
pk: 10
fields:
first_name: Mullen
last_name: Peterson
jersey_number: 10
- model: players.player
pk: 11
fields:
first_name: Justice
last_name: Spoon
jersey_number: 11
- model: players.player
pk: 12
fields:
first_name: Caleb
last_name: Alvarado
jersey_number: 12
- model: players.player
pk: 13
fields:
first_name: Atlas
last_name: Guerra
jersey_number: 13
- model: players.player
pk: 14
fields:
first_name: Swamuel
last_name: Mora
jersey_number: 14

View File

@@ -0,0 +1,37 @@
# Generated by Django 3.2.6 on 2021-11-07 17:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Player',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=200)),
('last_name', models.CharField(max_length=200)),
('jersey_number', models.IntegerField()),
],
options={
'unique_together': {('first_name', 'last_name')},
},
),
migrations.CreateModel(
name='Stat',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('batting_avg', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('onbase_pct', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('slugging_pct', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='players.player')),
],
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.2.6 on 2021-11-07 18:46
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('players', '0001_initial'),
]
operations = [
migrations.RenameModel(
old_name='Stat',
new_name='StatLine',
),
]

View File

30
players/models.py Normal file
View File

@@ -0,0 +1,30 @@
from django.db import models
class Player(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
jersey_number = models.IntegerField()
def __str__(self):
return f"{self.last_name}, {self.first_name}"
class Meta:
unique_together = ('first_name', 'last_name',)
class StatLine(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
batting_avg = models.DecimalField(max_digits=4, decimal_places=3, default=0)
onbase_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
slugging_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
def __str__(self):
return f"{self.batting_avg}/{self.onbase_pct}/{self.slugging_pct}"
@property
def slash_line(self):
return "/".join([
f"{self.batting_avg:.3f}".lstrip("0"),
f"{self.onbase_pct:.3f}".lstrip("0"),
f"{self.slugging_pct:.3f}".replace("0.",".")
]
)

8
players/urls.py Normal file
View File

@@ -0,0 +1,8 @@
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
]

3
players/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

0
teams/__init__.py Normal file
View File

5
teams/admin.py Normal file
View File

@@ -0,0 +1,5 @@
from django.contrib import admin
from .models import Team
# Register your models here.
admin.site.register(Team)

6
teams/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class TeamsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'teams'

View File

@@ -0,0 +1,96 @@
- model: teams.team
pk: 1
fields:
name: Chicago Firefighters
- model: teams.team
pk: 2
fields:
name: Boston Flowers
- model: teams.team
pk: 3
fields:
name: Philly Pies
- model: teams.team
pk: 4
fields:
name: Yellowstone Magic
- model: teams.team
pk: 5
fields:
name: Tokyo Lift
- model: teams.team
pk: 6
fields:
name: Unlimited Tacos
- model: teams.team
pk: 7
fields:
name: Dallas Steaks
- model: teams.team
pk: 8
fields:
name: Charleston Shoe Thieves
- model: teams.team
pk: 9
fields:
name: Hades Tigers
- model: teams.team
pk: 10
fields:
name: Hellmouth Sunbeams
- model: teams.team
pk: 11
fields:
name: San Francisco Lovers
- model: teams.team
pk: 12
fields:
name: Hawai'i Fridays
- model: teams.team
pk: 13
fields:
name: Breckenridge Jazz Hands
- model: teams.team
pk: 14
fields:
name: Houston Spies
- model: teams.team
pk: 15
fields:
name: New York Millennials
- model: teams.team
pk: 16
fields:
name: Kansas City Breath Mints
- model: teams.team
pk: 17
fields:
name: Mexico City Wild Wings
- model: teams.team
pk: 18
fields:
name: Miami Dale
- model: teams.team
pk: 19
fields:
name: Seattle Garages
- model: teams.team
pk: 20
fields:
name: Canada Moist Talkers
- model: teams.team
pk: 21
fields:
name: Atlantis Georgias
- model: teams.team
pk: 22
fields:
name: Ohio Worms
- model: teams.team
pk: 23
fields:
name: Core Mechanics
- model: teams.team
pk: 24
fields:
name: Baltimore Crabs

View File

@@ -0,0 +1,23 @@
# Generated by Django 3.2.6 on 2021-11-07 17:43
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Team',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('image', models.FileField(null=True, upload_to='images/', validators=[django.core.validators.FileExtensionValidator(['jpg', 'png', 'svg'])])),
],
),
]

View File

9
teams/models.py Normal file
View File

@@ -0,0 +1,9 @@
from django.db import models
from django.core.validators import FileExtensionValidator
class Team(models.Model):
name = models.CharField(max_length = 50)
image = models.FileField(upload_to='images/', validators=[FileExtensionValidator(['jpg', 'png', 'svg'])], null=True)
def __str__(self):
return f"{self.name}"

View File

@@ -0,0 +1,13 @@
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
<Title>Teams</Title>
<h1>Teams</h1>
<ol>
{% for team in teams %}
<li>
{{ team.name }}
</li>
{% endfor %}
</ol>

10
teams/urls.py Normal file
View File

@@ -0,0 +1,10 @@
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.root, name="root"),
path('list', views.list, name="teams_list")
]

9
teams/views.py Normal file
View File

@@ -0,0 +1,9 @@
from django.shortcuts import render, redirect
from .models import Team
def root(request):
return redirect('/teams/list')
def list(request):
teams = Team.objects.all()
return render(request, 'teams/list.html', {'teams': teams})

22
templates/base.html Normal file
View File

@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
<head>
<meta charset="UTF-8">
<title>{% block title %}Title{% endblock %}</title>
</head>
<body>
<nav class="navbar navbar-dark bg-dark">
<a class="navbar-brand h1" style="text-transform: uppercase" href="{% url 'home' %}">⚾️ Bench Coach</a>
</nav>
<div id="content" class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>

17
templates/home.html Normal file
View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
<meta charset="UTF-8">
<title>Bench Coach</title>
</head>
<h1>Bench Coach</h1>
{% for page in pages %}
<li><a style="text-transform:capitalize;" href="{% url page %}">{{ page }} </a></li>
{% endfor %}
<body>
</body>
</html>

14
templates/list.html Normal file
View File

@@ -0,0 +1,14 @@
{% extends "base.html" %}
{% block title %} {{ title }}{% endblock %}
{% block content %}
<h1>{{ title }}</h1>
<ol class="list-group">
{% for item in items %}
<li class="list-group-item">
{{ item }}
</li>
{% endfor %}
</ol>
{% endblock %}

73
templates/navbar.html Normal file
View File

@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<style>
ul.dropdown-list {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li.navbar-item {
float: left;
}
li a, .dropbtn {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover, .dropdown:hover .dropbtn {
background-color: red;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
.dropdown-content a:hover {background-color: #f1f1f1;}
.dropdown:hover .dropdown-content {
display: block;
}
</style>
</head>
<body>
<ul class="dropdown-list">
<li class="navbar-item"><a href="#home">Home</a></li>
<li class="dropdown">
<a href="javascript:void(0)" class="dropbtn">Dropdown</a>
<div class="dropdown-content">
{% for event in events %}
<a href="{% url 'players' year=event.date.year month=event.date.month day=event.date.day %}">{{ event.date }} </a>
{% endfor %}
</div>
</li>
<li style="float:right">⚾️</li>
</ul>
</body>
</html>

0
venues/__init__.py Normal file
View File

5
venues/admin.py Normal file
View File

@@ -0,0 +1,5 @@
from django.contrib import admin
from .models import Venue
# Register your models here.
admin.site.register(Venue)

6
venues/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class VenuesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'venues'

View File

@@ -0,0 +1,100 @@
- model: venues.venue
pk: 1
fields:
name: Chesapeake Racetrack and Ballpark
- model: venues.venue
pk: 2
fields:
name: Tokyo Fitness Center
- model: venues.venue
pk: 3
fields:
name: Breckenridge Community Field
- model: venues.venue
pk: 4
fields:
name: The Fire Safety Awareness Center
- model: venues.venue
pk: 5
fields:
name: Sixth Circle Stadium
- model: venues.venue
pk: 6
fields:
name: Basin of Mexico Park
- model: venues.venue
pk: 7
fields:
name: The Atlantean Dome
- model: venues.venue
pk: 8
fields:
name: Al Pastor Memorial Park
- model: venues.venue
pk: 9
fields:
name: Miami International Arena
- model: venues.venue
pk: 10
fields:
name: Boston Garden
- model: venues.venue
pk: 11
fields:
name: Lower Moab Scenic Overlook Field
- model: venues.venue
pk: 12
fields:
name: An Undisclosed Location
- model: venues.venue
pk: 13
fields:
name: Wapakoneta Air, Space and Worm Museum and Ballpark
- model: venues.venue
pk: 14
fields:
name: New York, New York Arena, Arena
- model: venues.venue
pk: 15
fields:
name: George Fourman Stadium
- model: venues.venue
pk: 16
fields:
name: San Franstadium
- model: venues.venue
pk: 17
fields:
name: Tastycake Stadium
- model: venues.venue
pk: 18
fields:
name: The Hotdogfingers Memorial Climate Pledge Garage and Parking Facility
- model: venues.venue
pk: 19
fields:
name: Core Pillar Center
- model: venues.venue
pk: 20
fields:
name: Hawai'i Viberight Field
- model: venues.venue
pk: 21
fields:
name: Gleek Arena
- model: venues.venue
pk: 22
fields:
name: Choux Stadium
- model: venues.venue
pk: 23
fields:
name: Yellowstone National (Ball)Park
- model: venues.venue
pk: 24
fields:
name: Kansas City FreshDome
- model: venues.venue
pk: 25
fields:
name: ILB Historical Preservation Site

View File

@@ -0,0 +1,21 @@
# Generated by Django 3.2.6 on 2021-11-07 17:43
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Venue',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
]

View File

7
venues/models.py Normal file
View File

@@ -0,0 +1,7 @@
from django.db import models
class Venue(models.Model):
name = models.CharField(max_length = 50)
def __str__(self):
return f"{self.name}"

View File

@@ -0,0 +1,13 @@
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
<Title>Venues</Title>
<h1>Venues</h1>
<ol>
{% for venue in venues %}
<li>
{{ venue.name }}
</li>
{% endfor %}
</ol>

8
venues/urls.py Normal file
View File

@@ -0,0 +1,8 @@
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.root, name="root"),
path('list', views.list, name="venues_list")
]

9
venues/views.py Normal file
View File

@@ -0,0 +1,9 @@
from django.shortcuts import render, redirect
from .models import Venue
def root(request):
return redirect('/venues/list')
def list(request):
venues = Venue.objects.all()
return render(request, 'venues/list.html', {'venues': venues})