added other data models from the specs

This commit is contained in:
Corban-Lee 2023-01-26 14:38:07 +00:00
parent 359677cfde
commit f10d849631
4 changed files with 132 additions and 11 deletions

View File

@ -2,7 +2,7 @@
from django.contrib import admin
from .models import Peg
from .models import Peg, Member, Team, Section
@admin.register(Peg)
@ -14,3 +14,28 @@ class PegAdmin(admin.ModelAdmin):
list_display = ("peg_number",)
search_fields = ("peg_number",)
@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
"""Admin model for the Member model."""
list_display = ("first_name", "last_name", "user", "team", "peg")
search_fields = ("first_name", "last_name", "user", "team", "peg")
list_filter = ("team", "peg")
@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
"""Admin model for the Team model."""
readonly_fields = ("team_number",)
list_display = ("team_number",)
search_fields = ("team_number",)
@admin.register(Section)
class SectionAdmin(admin.ModelAdmin):
"""Admin model for the Section model."""
list_display = ("character",)
search_fields = ("character",)

View File

@ -1,6 +1,8 @@
# Generated by Django 4.1.5 on 2023-01-26 09:11
# Generated by Django 4.1.5 on 2023-01-26 14:24
from django.db import migrations
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import mainapp.models
@ -9,6 +11,7 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
@ -18,4 +21,27 @@ class Migration(migrations.Migration):
('peg_number', mainapp.models.ReusableAutoField(default=mainapp.models.ReusableAutoField.get_default, editable=False, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name='Section',
fields=[
('character', models.CharField(max_length=1, primary_key=True, serialize=False, validators=[mainapp.models.validate_section_character])),
],
),
migrations.CreateModel(
name='Team',
fields=[
('team_number', mainapp.models.ReusableAutoField(default=mainapp.models.ReusableAutoField.get_default, editable=False, primary_key=True, serialize=False)),
('section', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mainapp.section')),
],
),
migrations.CreateModel(
name='Member',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=255)),
('last_name', models.CharField(max_length=255)),
('team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mainapp.team')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -0,0 +1,25 @@
# Generated by Django 4.1.5 on 2023-01-26 14:31
from django.db import migrations, models
import django.db.models.deletion
import mainapp.models
class Migration(migrations.Migration):
dependencies = [
('mainapp', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='member',
name='peg',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mainapp.peg'),
),
migrations.AlterField(
model_name='member',
name='team',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mainapp.team', validators=[mainapp.models.validate_team_size]),
),
]

View File

@ -1,4 +1,5 @@
from django.db import models
from django.core.exceptions import ValidationError
# products/models.py
from django.db import models
@ -24,6 +25,8 @@ class ReusableAutoField(models.PositiveIntegerField):
return 1
def get_default(self):
"""Returns the default value for this field"""
return self.get_next_available_id(self.model)
@ -33,16 +36,58 @@ class Peg(models.Model):
peg_number = ReusableAutoField(primary_key=True, default=ReusableAutoField.get_default, editable=False)
def __str__(self):
return f"{self.peg_number}"
return f"Peg {self.peg_number}"
def get_next_available_peg_id():
queryset = Peg.__class__._default_manager.all()
try:
last_id = queryset.order_by("-pk")[0].pk
except IndexError:
last_id = 0
return last_id + 1
def validate_team_size(value):
if Member.objects.filter(team=value).count() >= 3:
raise ValidationError('Team already has maximal amount of members (3)')
class Member(models.Model):
"""Represents a member of a team"""
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
user = models.OneToOneField("auth.User", on_delete=models.CASCADE)
team = models.ForeignKey("Team", on_delete=models.SET_NULL, null=True, blank=True, validators=(validate_team_size,))
peg = models.OneToOneField("Peg", on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self):
return f"{self.first_name} {self.last_name} (team {self.team.team_number}))"
class Team(models.Model):
"""Represents a team"""
team_number = ReusableAutoField(primary_key=True, default=ReusableAutoField.get_default, editable=False)
section = models.OneToOneField("Section", on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self):
return f"Team {self.team_number}"
def validate_section_character(value):
"""Validates the section character"""
value = value.upper()
banned_characters = ["I"]
if value in banned_characters:
raise ValidationError(f"The character <{value}> is a prohibited character because fuck you I guess")
class Section(models.Model):
"""Represents a section of the scoreboard"""
# character field stores a single character but doesnt allow for 'E' or 'e'
character = models.CharField(primary_key=True, max_length=1, validators=(validate_section_character, ))
def clean(self):
self.character = self.character.upper()
def __str__(self):
return f"Section {self.character}"
#class Scoreboard(models.Model):