initial commit. displays simple hierarchy and lists of models. includes fixtures for initial data.
This commit is contained in:
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})
|
||||
Reference in New Issue
Block a user