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 django.contrib import admin
|
||||||
|
|
||||||
from .models import Peg
|
from .models import Peg, Member, Team, Section
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Peg)
|
@admin.register(Peg)
|
||||||
@ -14,3 +14,28 @@ class PegAdmin(admin.ModelAdmin):
|
|||||||
list_display = ("peg_number",)
|
list_display = ("peg_number",)
|
||||||
search_fields = ("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
|
import mainapp.models
|
||||||
|
|
||||||
|
|
||||||
@ -9,6 +11,7 @@ class Migration(migrations.Migration):
|
|||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
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)),
|
('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.db import models
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
# products/models.py
|
# products/models.py
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@ -24,6 +25,8 @@ class ReusableAutoField(models.PositiveIntegerField):
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
def get_default(self):
|
def get_default(self):
|
||||||
|
"""Returns the default value for this field"""
|
||||||
|
|
||||||
return self.get_next_available_id(self.model)
|
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)
|
peg_number = ReusableAutoField(primary_key=True, default=ReusableAutoField.get_default, editable=False)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.peg_number}"
|
return f"Peg {self.peg_number}"
|
||||||
|
|
||||||
|
|
||||||
def get_next_available_peg_id():
|
def validate_team_size(value):
|
||||||
queryset = Peg.__class__._default_manager.all()
|
if Member.objects.filter(team=value).count() >= 3:
|
||||||
try:
|
raise ValidationError('Team already has maximal amount of members (3)')
|
||||||
last_id = queryset.order_by("-pk")[0].pk
|
|
||||||
except IndexError:
|
|
||||||
last_id = 0
|
class Member(models.Model):
|
||||||
return last_id + 1
|
"""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):
|
#class Scoreboard(models.Model):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user