Added House and Points Entry models

This commit is contained in:
Ceferino Patino 2022-05-21 13:51:40 -05:00
commit 5503ee1bd7
8 changed files with 151 additions and 27 deletions

View file

@ -1,6 +1,6 @@
from django.contrib import admin
from django.db.models import Count
from .models import Activity, Entry
from django.db.models import Sum
from .models import Activity, House, UserEntry, PointsEntry
@admin.register(Activity)
@ -16,22 +16,22 @@ class ActivityAdmin(admin.ModelAdmin):
@admin.display(description='Hawk Signups')
def hawk_signups(self, obj):
return str(Entry.hawk.filterActivity1(obj).count()) + " / " + str((Entry.hawk.filterActivity2(obj).count(), "N/A")[obj.time == 60])
return str(UserEntry.hawk.filterActivity1(obj).count()) + " / " + str((UserEntry.hawk.filterActivity2(obj).count(), "N/A")[obj.time == 60])
@admin.display(description='Great Grey Signups')
def great_grey_signups(self, obj):
return str(Entry.great_grey.filterActivity1(obj).count()) + " / " + str((Entry.great_grey.filterActivity2(obj).count(), "N/A")[obj.time == 60])
return str(UserEntry.great_grey.filterActivity1(obj).count()) + " / " + str((UserEntry.great_grey.filterActivity2(obj).count(), "N/A")[obj.time == 60])
@admin.display(description='Snowy Signups')
def snowy_signups(self, obj):
return str(Entry.snowy.filterActivity1(obj).count()) + " / " + str((Entry.snowy.filterActivity2(obj).count(), "N/A")[obj.time == 60])
return str(UserEntry.snowy.filterActivity1(obj).count()) + " / " + str((UserEntry.snowy.filterActivity2(obj).count(), "N/A")[obj.time == 60])
@admin.display(description='Eagle Signups')
def eagle_signups(self, obj):
return str(Entry.eagle.filterActivity1(obj).count()) + " / " + str((Entry.eagle.filterActivity2(obj).count(), "N/A")[obj.time == 60])
return str(UserEntry.eagle.filterActivity1(obj).count()) + " / " + str((UserEntry.eagle.filterActivity2(obj).count(), "N/A")[obj.time == 60])
@admin.register(Entry)
@admin.register(UserEntry)
class EntryAdmin(admin.ModelAdmin):
fieldsets = [
('Personal Information', {'fields': [
@ -44,3 +44,17 @@ class EntryAdmin(admin.ModelAdmin):
'house', 'activity1', 'activity2')
list_filter = ['house', 'grade', 'activity1', 'activity2']
@admin.register(House)
class HouseAdmin(admin.ModelAdmin):
list_display = ('name', 'points', 'current_points')
@admin.display(description='Current HouseWar Points')
def current_points(self, obj):
return PointsEntry.objects.filter(house__name=obj.name).aggregate(Sum('points')).get('points__sum')
@admin.register(PointsEntry)
class PointsEntryAdmin(admin.ModelAdmin):
list_display = ('activity', 'name', 'house', 'points')

View file

@ -1,7 +1,7 @@
from django.forms import Form, CharField, EmailField, ChoiceField, ModelChoiceField, Select, TextInput, EmailInput
from django.forms import ValidationError
from .models import Entry, Activity
from .models import Activity, House, UserEntry
class UserEntryForm(Form):
@ -21,12 +21,12 @@ class UserEntryForm(Form):
'id': 'email',
'placeholder': 'Email'
}))
grade = ChoiceField(choices=Entry.GradeChoices, widget=Select(attrs={
grade = ChoiceField(choices=UserEntry.GradeChoices, widget=Select(attrs={
'class': "form-select",
'id': 'grade',
'placeholder': 'Grade'
}))
house = ChoiceField(choices=Entry.HouseChoices, widget=Select(attrs={
house = ModelChoiceField(House.objects.all(), widget=Select(attrs={
'class': "form-select",
'id': 'house',
'placeholder': 'House'

View file

@ -1,4 +1,4 @@
from django.db.models import Manager, F
from django.db.models import Manager
class EntryManager(Manager):
@ -11,19 +11,19 @@ class EntryManager(Manager):
class HawkEntryManager(EntryManager):
def get_queryset(self):
return super().get_queryset().filter(house='HAWK')
return super().get_queryset().filter(house__name='Hawk')
class EagleEntryManager(EntryManager):
def get_queryset(self):
return super().get_queryset().filter(house='EAGLE')
return super().get_queryset().filter(house__name='Eagle')
class GreatGreyEntryManager(EntryManager):
def get_queryset(self):
return super().get_queryset().filter(house='GREATGREY')
return super().get_queryset().filter(house__name='Great Grey')
class SnowyEntryManager(EntryManager):
def get_queryset(self):
return super().get_queryset().filter(house='SNOWY')
return super().get_queryset().filter(house__name='Snowy')

View file

@ -0,0 +1,59 @@
# Generated by Django 4.0.4 on 2022-05-21 18:15
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
class Migration(migrations.Migration):
dependencies = [
('housewars', '0012_alter_activity_managers_alter_entry_house_and_more'),
]
operations = [
migrations.CreateModel(
name='House',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('points', models.IntegerField()),
],
),
migrations.CreateModel(
name='PointsEntry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('points', models.IntegerField()),
('reason', models.TextField()),
('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.activity')),
('house', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.house')),
],
options={
'verbose_name_plural': 'Point Entries',
},
),
migrations.CreateModel(
name='UserEntry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=100)),
('last_name', models.CharField(max_length=100)),
('email', models.EmailField(max_length=100)),
('grade', models.IntegerField(choices=[(9, '9th/Freshman'), (10, '10th/Sophomore'), (11, '11th/Junior'), (12, '12th/Senior')])),
('activity1', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activity1', to='housewars.activity')),
('activity2', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='activity2', to='housewars.activity')),
('house', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.house')),
],
options={
'verbose_name_plural': 'User Entries',
},
managers=[
('hawk', django.db.models.manager.Manager()),
],
),
migrations.DeleteModel(
name='Entry',
),
]

View file

@ -0,0 +1,20 @@
# Generated by Django 4.0.4 on 2022-05-21 18:17
from django.db import migrations
import django.db.models.manager
class Migration(migrations.Migration):
dependencies = [
('housewars', '0013_house_pointsentry_userentry_delete_entry'),
]
operations = [
migrations.AlterModelManagers(
name='pointsentry',
managers=[
('hawk', django.db.models.manager.Manager()),
],
),
]

View file

@ -0,0 +1,18 @@
# Generated by Django 4.0.4 on 2022-05-21 18:33
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('housewars', '0014_alter_pointsentry_managers'),
]
operations = [
migrations.AlterModelManagers(
name='pointsentry',
managers=[
],
),
]

View file

@ -19,9 +19,17 @@ class Activity(models.Model):
return f"{self.name} ({self.time})"
class Entry(models.Model):
class House(models.Model):
name = models.CharField(max_length=100)
points = models.IntegerField()
def __str__(self):
return f"{self.name}"
class UserEntry(models.Model):
class Meta:
verbose_name_plural = "Entries"
verbose_name_plural = "User Entries"
objects = EntryManager()
hawk = HawkEntryManager()
@ -36,18 +44,12 @@ class Entry(models.Model):
(12, '12th/Senior'),
)
HouseChoices = (
('HAWK', 'Hawk'),
('GREATGREY', 'Great Grey'),
('EAGLE', 'Eagle'),
('SNOWY', 'Snowy')
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
grade = models.IntegerField(choices=GradeChoices)
house = models.CharField(choices=HouseChoices, max_length=15)
house = models.ForeignKey(
House, on_delete=models.CASCADE)
activity1 = models.ForeignKey(
Activity, related_name='activity1', on_delete=models.CASCADE)
activity2 = models.ForeignKey(
@ -55,3 +57,14 @@ class Entry(models.Model):
def __str__(self):
return f"{self.first_name} {self.last_name}"
class PointsEntry(models.Model):
class Meta:
verbose_name_plural = "Point Entries"
name = models.CharField(max_length=100)
activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
house = models.ForeignKey(House, on_delete=models.CASCADE)
points = models.IntegerField()
reason = models.TextField(blank=False)

View file

@ -4,7 +4,7 @@ from django.urls import reverse
from django.db.models import Count, Q, F
from formtools.wizard.views import SessionWizardView
from .models import Activity, Entry
from .models import Activity, UserEntry
from .forms import UserEntryForm, ActivityForm
FORMS = [("user", UserEntryForm),
@ -47,7 +47,7 @@ class EntryCreateView(SessionWizardView):
return form
def done(self, form_list, **kwargs):
Entry.objects.create(**self.get_all_cleaned_data())
UserEntry.objects.create(**self.get_all_cleaned_data())
messages.success(self.request, 'Your entry has been submitted')
return redirect('housewars:create_entry')