Added model based enforcements

This commit is contained in:
Ceferino Patino 2022-08-31 22:52:31 -05:00
commit 68ea97070b
29 changed files with 143 additions and 553 deletions

View file

@ -1,4 +1,4 @@
# Generated by Django 4.0.4 on 2022-05-16 23:29
# Generated by Django 4.0.4 on 2022-09-03 04:48
from django.db import migrations, models
import django.db.models.deletion
@ -17,20 +17,84 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('quota', models.IntegerField()),
('time', models.IntegerField(choices=[(30, '30'), (60, '60')])),
('default_quota', models.IntegerField(default=0)),
('time', models.IntegerField(blank=True, choices=[(30, '30'), (60, '60')], null=True)),
('password', models.CharField(blank=True, default=None, max_length=100, null=True)),
],
options={
'verbose_name_plural': 'Activities',
},
),
migrations.CreateModel(
name='Award',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=15)),
('points', models.IntegerField(default=0)),
('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.activity')),
],
),
migrations.CreateModel(
name='Entry',
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(default=0)),
],
),
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.CharField(choices=[('9th', '9Th'), ('10th', '10Th'), ('11th', '11Th'), ('12th', '12Th')], max_length=5)),
('email', models.EmailField(max_length=100, unique=True)),
('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(on_delete=django.db.models.deletion.CASCADE, related_name='activity2', 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',
},
),
migrations.CreateModel(
name='PointsEntry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(blank=True, max_length=15)),
('activity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.activity')),
('award', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.award')),
('house', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.house')),
],
options={
'verbose_name_plural': 'Point Entries',
},
),
migrations.CreateModel(
name='Teacher',
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)),
('grade', models.IntegerField(choices=[(9, '9th/Freshman'), (10, '10th/Sophomore'), (11, '11th/Junior'), (12, '12th/Senior')])),
('activity', models.OneToOneField(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teacher', to='housewars.activity')),
('house', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teacher', to='housewars.house')),
],
options={
'unique_together': {('house', 'grade')},
},
),
migrations.CreateModel(
name='Quota',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quota', models.IntegerField(default=0)),
('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={
'unique_together': {('activity', 'house')},
},
),
]

View file

@ -1,17 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-16 23:37
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('housewars', '0001_initial'),
]
operations = [
migrations.AlterModelTable(
name='activity',
table='Activities',
),
]

View file

@ -0,0 +1,30 @@
# Generated by Django 4.0.4 on 2022-09-03 05:12
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.expressions
class Migration(migrations.Migration):
dependencies = [
('housewars', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='award',
name='activity',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='awards', to='housewars.activity'),
),
migrations.AlterField(
model_name='pointsentry',
name='activity',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='Activity', to='housewars.activity'),
),
migrations.AlterField(
model_name='pointsentry',
name='award',
field=models.ForeignKey(limit_choices_to=models.Q(('activity__award', django.db.models.expressions.F('activity'))), on_delete=django.db.models.deletion.CASCADE, to='housewars.award'),
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-16 23:38
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('housewars', '0002_alter_activity_table'),
]
operations = [
migrations.AlterModelOptions(
name='activity',
options={'verbose_name_plural': 'Activities'},
),
migrations.AlterModelOptions(
name='entry',
options={'verbose_name_plural': 'Entries'},
),
migrations.AlterModelTable(
name='activity',
table=None,
),
]

View file

@ -0,0 +1,25 @@
# Generated by Django 4.0.4 on 2022-09-03 05:46
from django.db import migrations, models
import django.db.models.deletion
import smart_selects.db_fields
class Migration(migrations.Migration):
dependencies = [
('housewars', '0002_alter_award_activity_alter_pointsentry_activity_and_more'),
]
operations = [
migrations.AlterField(
model_name='award',
name='activity',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.activity'),
),
migrations.AlterField(
model_name='pointsentry',
name='award',
field=smart_selects.db_fields.ChainedForeignKey(auto_choose=True, blank=True, chained_field='activity', chained_model_field='activity__name', null=True, on_delete=django.db.models.deletion.CASCADE, to='housewars.award'),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 02:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0003_alter_activity_options_alter_entry_options_and_more'),
]
operations = [
migrations.AlterField(
model_name='entry',
name='grade',
field=models.IntegerField(choices=[(9, '9th/Freshman'), (10, '10th/Sophomore'), (11, '11th/Junior'), (12, '12th/Senior')]),
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 12:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0004_alter_entry_grade'),
]
operations = [
migrations.AlterField(
model_name='entry',
name='activity2',
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='activity2', to='housewars.activity'),
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 13:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0005_alter_entry_activity2'),
]
operations = [
migrations.AddField(
model_name='entry',
name='house',
field=models.CharField(choices=[('HAWK', 'Hawk'), ('GREATGREY', 'Great Grey'), ('EAGLE', 'Eagle'), ('SNOWY', 'Snowy')], default='HAWK', max_length=15),
preserve_default=False,
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 14:28
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0006_entry_house'),
]
operations = [
migrations.AlterField(
model_name='entry',
name='activity2',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='activity2', to='housewars.activity'),
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 15:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0007_alter_entry_activity2'),
]
operations = [
migrations.AddField(
model_name='activity',
name='session1_signups',
field=models.IntegerField(default=10),
preserve_default=False,
),
migrations.AddField(
model_name='activity',
name='session2_signups',
field=models.IntegerField(default=10),
preserve_default=False,
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 15:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0008_activity_session1_signups_activity_session2_signups'),
]
operations = [
migrations.AlterField(
model_name='activity',
name='session1_signups',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='activity',
name='session2_signups',
field=models.IntegerField(default=0),
),
]

View file

@ -1,21 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-17 22:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('housewars', '0009_alter_activity_session1_signups_and_more'),
]
operations = [
migrations.RemoveField(
model_name='activity',
name='session1_signups',
),
migrations.RemoveField(
model_name='activity',
name='session2_signups',
),
]

View file

@ -1,33 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-18 22:10
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
class Migration(migrations.Migration):
dependencies = [
('housewars', '0010_remove_activity_session1_signups_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)),
],
),
migrations.AlterModelManagers(
name='activity',
managers=[
('session1', django.db.models.manager.Manager()),
],
),
migrations.AlterField(
model_name='entry',
name='house',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='housewars.house'),
),
]

View file

@ -1,26 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-19 00:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0011_house_alter_activity_managers_alter_entry_house'),
]
operations = [
migrations.AlterModelManagers(
name='activity',
managers=[
],
),
migrations.AlterField(
model_name='entry',
name='house',
field=models.CharField(choices=[('HAWK', 'Hawk'), ('GREATGREY', 'Great Grey'), ('EAGLE', 'Eagle'), ('SNOWY', 'Snowy')], max_length=15),
),
migrations.DeleteModel(
name='House',
),
]

View file

@ -1,59 +0,0 @@
# 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

@ -1,20 +0,0 @@
# 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

@ -1,18 +0,0 @@
# 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

@ -1,23 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-21 20:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('housewars', '0015_alter_pointsentry_managers'),
]
operations = [
migrations.AlterModelManagers(
name='userentry',
managers=[
],
),
migrations.RenameField(
model_name='pointsentry',
old_name='reason',
new_name='comment',
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 4.0.4 on 2022-05-21 20:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0016_alter_userentry_managers_and_more'),
]
operations = [
migrations.AlterField(
model_name='house',
name='points',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='pointsentry',
name='points',
field=models.IntegerField(default=0),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-08 22:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0017_alter_house_points_alter_pointsentry_points'),
]
operations = [
migrations.AlterField(
model_name='pointsentry',
name='comment',
field=models.TextField(blank=True),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-08 22:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0018_alter_pointsentry_comment'),
]
operations = [
migrations.AlterField(
model_name='pointsentry',
name='comment',
field=models.TextField(blank=True, default=''),
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-30 14:13
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0019_alter_pointsentry_comment'),
]
operations = [
migrations.CreateModel(
name='Teacher',
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)),
('grade', models.IntegerField(choices=[(9, '9th/Freshman'), (10, '10th/Sophomore'), (11, '11th/Junior'), (12, '12th/Senior')])),
('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')),
],
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-30 21:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0020_teacher'),
]
operations = [
migrations.AlterField(
model_name='teacher',
name='activity',
field=models.OneToOneField(on_delete=django.db.models.deletion.DO_NOTHING, to='housewars.activity'),
),
migrations.AlterField(
model_name='teacher',
name='house',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='housewars.house'),
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-30 22:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0021_alter_teacher_activity_alter_teacher_house'),
]
operations = [
migrations.AlterField(
model_name='teacher',
name='activity',
field=models.OneToOneField(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='activity', to='housewars.activity'),
),
migrations.AlterField(
model_name='teacher',
name='house',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='house', to='housewars.house'),
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-30 22:04
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('housewars', '0022_alter_teacher_activity_alter_teacher_house'),
]
operations = [
migrations.AlterField(
model_name='teacher',
name='activity',
field=models.OneToOneField(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teacher', to='housewars.activity'),
),
migrations.AlterField(
model_name='teacher',
name='house',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teacher', to='housewars.house'),
),
]

View file

@ -1,22 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-31 02:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('housewars', '0023_alter_teacher_activity_alter_teacher_house'),
]
operations = [
migrations.RemoveField(
model_name='pointsentry',
name='comment',
),
migrations.AddField(
model_name='pointsentry',
name='password',
field=models.CharField(blank=True, default=None, max_length=15, null=True),
),
]

View file

@ -12,7 +12,10 @@ class Activity(models.Model):
name = models.CharField(max_length=100)
quota = models.IntegerField()
time = models.IntegerField(choices=TimeslotChoices)
time = models.IntegerField(
choices=TimeslotChoices, blank=True, null=True, default=None)
password = models.CharField(
max_length=100, blank=True, null=True, default=None)
def __str__(self):
return f"{self.name} ({self.time})"

View file

@ -3,6 +3,9 @@ from . import House, Activity
class Teacher(models.Model):
class Meta:
unique_together = [['house', 'grade']]
GradeChoices = (
(9, '9th/Freshman'),
(10, '10th/Sophomore'),

View file

@ -1,8 +1,8 @@
from django.db import models
from django.core.exceptions import ValidationError
from ..managers import (EagleEntryManager, EntryManager, GreatGreyEntryManager,
HawkEntryManager, SnowyEntryManager)
from . import House, Activity
@ -25,7 +25,7 @@ class UserEntry(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
email = models.EmailField(max_length=100, unique=True)
grade = models.IntegerField(choices=GradeChoices)
house = models.ForeignKey(
House, on_delete=models.CASCADE)
@ -34,9 +34,17 @@ class UserEntry(models.Model):
activity2 = models.ForeignKey(
Activity, related_name='activity2', on_delete=models.CASCADE, blank=True, null=True)
@property
def mentor(self):
return self.house.teacher.get(grade=self.grade)
def __str__(self):
return f"{self.first_name} {self.last_name}"
def clean(self):
if (self.activity1.time == None or self.activity2.time == None):
raise ValidationError('You cannot sign up for a null activity.')
def save(self, *args, **kwargs):
self.full_clean()
return super().save(*args, **kwargs)