replace generic types abstract model with integer choices
This commit is contained in:
parent
33de71ba71
commit
5f7ba001ac
@ -9,30 +9,14 @@ from . import models
|
||||
class Angler(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.AnglerGroupType)
|
||||
class AnglerGroupType(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.AnglerGroup)
|
||||
class AnglerGroup(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.FishType)
|
||||
class FishType(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.WatersType)
|
||||
class WatersType(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.Waters)
|
||||
class Waters(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.VenueType)
|
||||
class VenueType(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.VenueAddress)
|
||||
class VenueAddress(admin.ModelAdmin): pass
|
||||
|
||||
@ -41,12 +25,8 @@ class VenueAddress(admin.ModelAdmin): pass
|
||||
class VenueContacts(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.CompetitorType)
|
||||
class CompetitorType(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.MatchType)
|
||||
class MatchType(admin.ModelAdmin): pass
|
||||
@admin.register(models.Venue)
|
||||
class Venue(admin.ModelAdmin): pass
|
||||
|
||||
|
||||
@admin.register(models.Match)
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Generated by Django 5.0.6 on 2024-11-05 11:39
|
||||
# Generated by Django 5.0.6 on 2024-11-05 12:49
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
@ -20,55 +20,58 @@ class Migration(migrations.Migration):
|
||||
('name', models.CharField(max_length=128)),
|
||||
('redact', models.BooleanField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AnglerGroupType',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CompetitorType',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FishType',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
'verbose_name': 'angler',
|
||||
'verbose_name_plural': 'anglers',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeagueRule',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MatchType',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('ranking_system', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('points_allocation', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('points_awarded', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('place_secondly_by_weight', models.BooleanField()),
|
||||
('team_places_secondly_by_section', models.BooleanField()),
|
||||
('section_placed_positions', models.IntegerField()),
|
||||
('worst_place_limits', models.BooleanField()),
|
||||
('attendance_points', models.IntegerField()),
|
||||
('did_not_weigh', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('did_not_weigh_value', models.IntegerField()),
|
||||
('left_early', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('left_early_value', models.IntegerField()),
|
||||
('did_not_book', models.IntegerField()),
|
||||
('disqualification', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('disqualification_value', models.IntegerField()),
|
||||
('best_league_sessions', models.IntegerField()),
|
||||
('worst_league_sessions', models.IntegerField()),
|
||||
('match_placed_positions', models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
'verbose_name': 'league rule',
|
||||
'verbose_name_plural': 'league rules',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Match',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('description', models.CharField(max_length=384)),
|
||||
('meeting_point', models.CharField(max_length=1024)),
|
||||
('use_metric', models.BooleanField()),
|
||||
('allow_in_tournaments', models.BooleanField()),
|
||||
('start_datetime', models.DateTimeField()),
|
||||
('end_datetime', models.DateTimeField()),
|
||||
('draw_datetime', models.DateTimeField()),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('competitor_type', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'match',
|
||||
'verbose_name_plural': 'matches',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@ -79,6 +82,10 @@ class Migration(migrations.Migration):
|
||||
('url', models.URLField()),
|
||||
('image', models.ImageField(upload_to='')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'sponsor',
|
||||
'verbose_name_plural': 'sponsors',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Venue',
|
||||
@ -91,7 +98,12 @@ class Migration(migrations.Migration):
|
||||
('updated_at', models.DateTimeField(default=django.utils.timezone.now, editable=False)),
|
||||
('profile_picture', models.ImageField(upload_to='')),
|
||||
('banner_picture', models.ImageField(upload_to='')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(0, 'Fishery'), (1, 'Club'), (2, 'Private')])),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'venue',
|
||||
'verbose_name_plural': 'venues',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VenueAddress',
|
||||
@ -107,6 +119,10 @@ class Migration(migrations.Migration):
|
||||
('latitude', models.DecimalField(decimal_places=16, max_digits=22)),
|
||||
('longitude', models.DecimalField(decimal_places=16, max_digits=22)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'venue address',
|
||||
'verbose_name_plural': 'venue addresses',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VenueContacts',
|
||||
@ -119,27 +135,25 @@ class Migration(migrations.Migration):
|
||||
('twitter_url', models.URLField()),
|
||||
('instagram_url', models.URLField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VenueType',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
'verbose_name': 'venue contacts',
|
||||
'verbose_name_plural': 'venue contacts',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='WatersType',
|
||||
name='Waters',
|
||||
fields=[
|
||||
('name', models.CharField(max_length=128)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('pegs_from', models.IntegerField()),
|
||||
('pegs_to', models.IntegerField()),
|
||||
('map', models.ImageField(upload_to='')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(0, 'Commercial Water'), (1, 'Natural Still Water'), (2, 'Canal'), (3, 'River'), (4, 'Loch')])),
|
||||
('fish_types', models.PositiveSmallIntegerField(choices=[(0, 'Coarse'), (1, 'Specimen Carp'), (2, 'Game'), (3, 'Predator')])),
|
||||
],
|
||||
options={
|
||||
'ordering': ('name',),
|
||||
'abstract': False,
|
||||
'verbose_name': 'waters',
|
||||
'verbose_name_plural': 'waters',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@ -147,26 +161,13 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(0, 'choice 1'), (1, 'choice 2'), (2, 'choice 3')])),
|
||||
('anglers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.angler')),
|
||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.anglergrouptype')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Match',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('description', models.CharField(max_length=384)),
|
||||
('meeting_point', models.CharField(max_length=1024)),
|
||||
('use_metric', models.BooleanField()),
|
||||
('allow_in_tournaments', models.BooleanField()),
|
||||
('start_datetime', models.DateTimeField()),
|
||||
('end_datetime', models.DateTimeField()),
|
||||
('draw_datetime', models.DateTimeField()),
|
||||
('competitor_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.competitortype')),
|
||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.matchtype')),
|
||||
('venue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.venue')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'angler group',
|
||||
'verbose_name_plural': 'angler groups',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='League',
|
||||
@ -181,6 +182,10 @@ class Migration(migrations.Migration):
|
||||
('rules', models.ManyToManyField(to='apps_home.leaguerule')),
|
||||
('matches', models.ManyToManyField(to='apps_home.match')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'league',
|
||||
'verbose_name_plural': 'leagues',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeagueResult',
|
||||
@ -193,6 +198,15 @@ class Migration(migrations.Migration):
|
||||
('league', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.league')),
|
||||
('sponsor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='apps_home.sponsor')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'league result',
|
||||
'verbose_name_plural': 'league results',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='match',
|
||||
name='venue',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.venue'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='venue',
|
||||
@ -204,23 +218,6 @@ class Migration(migrations.Migration):
|
||||
name='contacts',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.venuecontacts'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='venue',
|
||||
name='type',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.venuetype'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Waters',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('pegs_from', models.IntegerField()),
|
||||
('pegs_to', models.IntegerField()),
|
||||
('map', models.ImageField(upload_to='')),
|
||||
('fish_types', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.fishtype')),
|
||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps_home.waterstype')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='venue',
|
||||
name='waters',
|
||||
|
@ -5,19 +5,6 @@ from django.utils import timezone
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
|
||||
# region Generic Models
|
||||
|
||||
class GenericTypeModel(models.Model):
|
||||
name = models.CharField(max_length=128)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
ordering = ("name",)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
# region Anglers & Groups
|
||||
|
||||
class Angler(models.Model):
|
||||
@ -25,19 +12,29 @@ class Angler(models.Model):
|
||||
name = models.CharField(max_length=128)
|
||||
redact = models.BooleanField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "angler"
|
||||
verbose_name_plural = "anglers"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class AnglerGroupType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class AnglerGroup(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=128)
|
||||
anglers = models.ForeignKey(to=Angler, on_delete=models.CASCADE)
|
||||
type = models.ForeignKey(to=AnglerGroupType, on_delete=models.CASCADE)
|
||||
|
||||
TYPES = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
type = models.PositiveSmallIntegerField(choices=TYPES)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "angler group"
|
||||
verbose_name_plural = "angler groups"
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.anglers.count} anglers)"
|
||||
@ -45,13 +42,6 @@ class AnglerGroup(models.Model):
|
||||
|
||||
# region Venues & Waters
|
||||
|
||||
class FishType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class WatersType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class Waters(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
@ -60,17 +50,44 @@ class Waters(models.Model):
|
||||
pegs_to = models.IntegerField()
|
||||
map = models.ImageField()
|
||||
|
||||
type = models.ForeignKey(to=WatersType, on_delete=models.CASCADE)
|
||||
fish_types = models.ForeignKey(to=FishType, on_delete=models.CASCADE)
|
||||
class Types:
|
||||
COMMERCIAL = 0
|
||||
NATURAL_STILL = 1
|
||||
CANAL = 2
|
||||
RIVER = 3
|
||||
LOCH = 4
|
||||
type = models.PositiveSmallIntegerField(
|
||||
choices=(
|
||||
(Types.COMMERCIAL, "Commercial Water"),
|
||||
(Types.NATURAL_STILL, "Natural Still Water"),
|
||||
(Types.CANAL, "Canal"),
|
||||
(Types.RIVER, "River"),
|
||||
(Types.LOCH, "Loch")
|
||||
)
|
||||
)
|
||||
|
||||
class FishTypes:
|
||||
COARSE = 0
|
||||
SPECIMEN_CARP = 1
|
||||
GAME = 2
|
||||
PREDATOR = 3
|
||||
fish_types = models.PositiveSmallIntegerField(
|
||||
choices=(
|
||||
(FishTypes.COARSE, "Coarse"),
|
||||
(FishTypes.SPECIMEN_CARP, "Specimen Carp"),
|
||||
(FishTypes.GAME, "Game"),
|
||||
(FishTypes.PREDATOR, "Predator")
|
||||
)
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "waters"
|
||||
verbose_name_plural = "waters"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class VenueType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class VenueAddress(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
street_number = models.IntegerField()
|
||||
@ -83,6 +100,10 @@ class VenueAddress(models.Model):
|
||||
latitude = models.DecimalField(max_digits=22, decimal_places=16)
|
||||
longitude = models.DecimalField(max_digits=22, decimal_places=16)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "venue address"
|
||||
verbose_name_plural = "venue addresses"
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.street_address}, {self.town} ({self.country})"
|
||||
|
||||
@ -96,6 +117,10 @@ class VenueContacts(models.Model):
|
||||
twitter_url = models.URLField()
|
||||
instagram_url = models.URLField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "venue contacts"
|
||||
verbose_name_plural = "venue contacts"
|
||||
|
||||
def __str__(self):
|
||||
return self.email_address
|
||||
|
||||
@ -112,11 +137,27 @@ class Venue(models.Model):
|
||||
profile_picture = models.ImageField()
|
||||
banner_picture = models.ImageField()
|
||||
|
||||
type = models.ForeignKey(to=VenueType, on_delete=models.CASCADE)
|
||||
class Types:
|
||||
FISHERY = 0
|
||||
CLUB = 1
|
||||
PRIVATE = 2
|
||||
|
||||
type = models.PositiveSmallIntegerField(
|
||||
choices=(
|
||||
(Types.FISHERY, "Fishery"),
|
||||
(Types.CLUB, "Club"),
|
||||
(Types.PRIVATE, "Private")
|
||||
)
|
||||
)
|
||||
|
||||
address = models.ForeignKey(to=VenueAddress, on_delete=models.CASCADE)
|
||||
contacts = models.ForeignKey(to=VenueContacts, on_delete=models.CASCADE)
|
||||
waters = models.ManyToManyField(to=Waters)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "venue"
|
||||
verbose_name_plural = "venues"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@ -127,13 +168,6 @@ class Venue(models.Model):
|
||||
|
||||
# region Leagues & Matches
|
||||
|
||||
class CompetitorType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class MatchType(GenericTypeModel):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class Match(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
@ -151,12 +185,101 @@ class Match(models.Model):
|
||||
end_datetime = models.DateTimeField()
|
||||
draw_datetime = models.DateTimeField()
|
||||
|
||||
type = models.ForeignKey(to=MatchType, on_delete=models.CASCADE)
|
||||
competitor_type = models.ForeignKey(to=CompetitorType, on_delete=models.CASCADE)
|
||||
TYPES = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
type = models.PositiveSmallIntegerField(choices=TYPES)
|
||||
|
||||
COMPETITOR_TYPES = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
competitor_type = models.PositiveSmallIntegerField(choices=COMPETITOR_TYPES)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "match"
|
||||
verbose_name_plural = "matches"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class LeagueRule(models.Model):
|
||||
pass
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=128)
|
||||
|
||||
RANKING_SYSTEMS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
ranking_system = models.PositiveSmallIntegerField(choices=RANKING_SYSTEMS)
|
||||
|
||||
POINTS_ALLOCATIONS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
points_allocation = models.PositiveSmallIntegerField(choices=POINTS_ALLOCATIONS)
|
||||
|
||||
POINTS_AWARDED = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
points_awarded = models.PositiveSmallIntegerField(choices=POINTS_AWARDED)
|
||||
|
||||
place_secondly_by_weight = models.BooleanField()
|
||||
team_places_secondly_by_section = models.BooleanField()
|
||||
section_placed_positions = models.IntegerField()
|
||||
worst_place_limits = models.BooleanField()
|
||||
attendance_points = models.IntegerField()
|
||||
|
||||
DID_NOT_WEIGHS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
did_not_weigh = models.PositiveSmallIntegerField(choices=DID_NOT_WEIGHS)
|
||||
did_not_weigh_value = models.IntegerField()
|
||||
|
||||
LEFT_EARLYS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
left_early = models.PositiveSmallIntegerField(choices=LEFT_EARLYS)
|
||||
left_early_value = models.IntegerField()
|
||||
|
||||
DID_NOT_BOOKS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
did_not_book = models.PositiveSmallIntegerField(choices=DID_NOT_BOOKS)
|
||||
did_not_book = models.IntegerField()
|
||||
|
||||
DISQUALIFICATIONS = (
|
||||
(0, "choice 1"),
|
||||
(1, "choice 2"),
|
||||
(2, "choice 3")
|
||||
)
|
||||
disqualification = models.PositiveSmallIntegerField(choices=DISQUALIFICATIONS)
|
||||
disqualification_value = models.IntegerField()
|
||||
|
||||
best_league_sessions = models.IntegerField()
|
||||
worst_league_sessions = models.IntegerField()
|
||||
match_placed_positions = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "league rule"
|
||||
verbose_name_plural = "league rules"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class League(models.Model):
|
||||
@ -172,6 +295,10 @@ class League(models.Model):
|
||||
anglers = models.ManyToManyField(to=Angler)
|
||||
rules = models.ManyToManyField(to=LeagueRule)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "league"
|
||||
verbose_name_plural = "leagues"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@ -186,6 +313,10 @@ class Sponsor(models.Model):
|
||||
url = models.URLField()
|
||||
image = models.ImageField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "sponsor"
|
||||
verbose_name_plural = "sponsors"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@ -201,6 +332,10 @@ class LeagueResult(models.Model):
|
||||
matches = models.IntegerField()
|
||||
date = models.DateField(default=timezone.now)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "league result"
|
||||
verbose_name_plural = "league results"
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.league.name} - {self.angler.name}"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user