initial commit. displays simple hierarchy and lists of models. includes fixtures for initial data.
This commit is contained in:
92
.gitignore
vendored
Normal file
92
.gitignore
vendored
Normal 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
0
benchcoach/__init__.py
Normal file
16
benchcoach/asgi.py
Normal file
16
benchcoach/asgi.py
Normal 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
135
benchcoach/settings.py
Normal 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
29
benchcoach/urls.py
Normal 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
6
benchcoach/views.py
Normal 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
16
benchcoach/wsgi.py
Normal 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
0
events/__init__.py
Normal file
7
events/admin.py
Normal file
7
events/admin.py
Normal 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
6
events/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class EventsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'events'
|
||||
245
events/fixtures/sample_events.yaml
Normal file
245
events/fixtures/sample_events.yaml
Normal 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'
|
||||
60
events/migrations/0001_initial.py
Normal file
60
events/migrations/0001_initial.py
Normal 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')},
|
||||
},
|
||||
),
|
||||
]
|
||||
17
events/migrations/0002_alter_availability_options.py
Normal file
17
events/migrations/0002_alter_availability_options.py
Normal 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'},
|
||||
),
|
||||
]
|
||||
0
events/migrations/__init__.py
Normal file
0
events/migrations/__init__.py
Normal file
56
events/models.py
Normal file
56
events/models.py
Normal 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)
|
||||
15
events/templates/events/schedule.html
Normal file
15
events/templates/events/schedule.html
Normal 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
10
events/urls.py
Normal 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
9
events/views.py
Normal 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
BIN
identifier.sqlite
Normal file
Binary file not shown.
22
manage.py
Executable file
22
manage.py
Executable 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
0
players/__init__.py
Normal file
6
players/admin.py
Normal file
6
players/admin.py
Normal 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
6
players/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class PlayersConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'players'
|
||||
84
players/fixtures/sample_players.yaml
Normal file
84
players/fixtures/sample_players.yaml
Normal 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
|
||||
37
players/migrations/0001_initial.py
Normal file
37
players/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
17
players/migrations/0002_rename_stat_statline.py
Normal file
17
players/migrations/0002_rename_stat_statline.py
Normal 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',
|
||||
),
|
||||
]
|
||||
0
players/migrations/__init__.py
Normal file
0
players/migrations/__init__.py
Normal file
30
players/models.py
Normal file
30
players/models.py
Normal 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
8
players/urls.py
Normal 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
3
players/views.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
0
teams/__init__.py
Normal file
0
teams/__init__.py
Normal file
5
teams/admin.py
Normal file
5
teams/admin.py
Normal 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
6
teams/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class TeamsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'teams'
|
||||
96
teams/fixtures/sample_teams.yaml
Normal file
96
teams/fixtures/sample_teams.yaml
Normal 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
|
||||
23
teams/migrations/0001_initial.py
Normal file
23
teams/migrations/0001_initial.py
Normal 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'])])),
|
||||
],
|
||||
),
|
||||
]
|
||||
0
teams/migrations/__init__.py
Normal file
0
teams/migrations/__init__.py
Normal file
9
teams/models.py
Normal file
9
teams/models.py
Normal 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}"
|
||||
13
teams/templates/teams/list.html
Normal file
13
teams/templates/teams/list.html
Normal 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
10
teams/urls.py
Normal 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
9
teams/views.py
Normal 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
22
templates/base.html
Normal 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
17
templates/home.html
Normal 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
14
templates/list.html
Normal 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
73
templates/navbar.html
Normal 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
0
venues/__init__.py
Normal file
5
venues/admin.py
Normal file
5
venues/admin.py
Normal 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
6
venues/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class VenuesConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'venues'
|
||||
100
venues/fixtures/sample_venues.yaml
Normal file
100
venues/fixtures/sample_venues.yaml
Normal 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
|
||||
21
venues/migrations/0001_initial.py
Normal file
21
venues/migrations/0001_initial.py
Normal 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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
0
venues/migrations/__init__.py
Normal file
0
venues/migrations/__init__.py
Normal file
7
venues/models.py
Normal file
7
venues/models.py
Normal 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}"
|
||||
13
venues/templates/venues/list.html
Normal file
13
venues/templates/venues/list.html
Normal 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
8
venues/urls.py
Normal 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
9
venues/views.py
Normal 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})
|
||||
Reference in New Issue
Block a user