added other data models from the specs
This commit is contained in:
parent
359677cfde
commit
f10d849631
@ -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",)
|
||||
|
@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
25
src/mainapp/migrations/0002_member_peg_alter_member_team.py
Normal file
25
src/mainapp/migrations/0002_member_peg_alter_member_team.py
Normal 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]),
|
||||
),
|
||||
]
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user