added pegging baby
This commit is contained in:
parent
5e38f95b91
commit
e74db50bdd
5
.gitignore
vendored
5
.gitignore
vendored
@ -2,4 +2,7 @@
|
|||||||
venv
|
venv
|
||||||
venv/
|
venv/
|
||||||
pyvenv.cfg
|
pyvenv.cfg
|
||||||
*.pyc
|
*.pyc
|
||||||
|
venv/pyvenv.cfg
|
||||||
|
src/db.sqlite3
|
||||||
|
*.sqlite3
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
"""Admin models for the mainapp app."""
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
# Register your models here.
|
from .models import Peg
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Peg)
|
||||||
|
class PegAdmin(admin.ModelAdmin):
|
||||||
|
"""Admin model for the Peg model."""
|
||||||
|
|
||||||
|
change_list_template = "entities/bulk_pegging.html"
|
||||||
|
readonly_fields = ("peg_number",)
|
||||||
|
list_display = ("peg_number",)
|
||||||
|
search_fields = ("peg_number",)
|
||||||
|
|
||||||
|
21
src/mainapp/migrations/0001_initial.py
Normal file
21
src/mainapp/migrations/0001_initial.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Generated by Django 4.1.5 on 2023-01-26 09:11
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import mainapp.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Peg',
|
||||||
|
fields=[
|
||||||
|
('peg_number', mainapp.models.ReusableAutoField(default=mainapp.models.ReusableAutoField.get_default, editable=False, primary_key=True, serialize=False)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
@ -3,8 +3,47 @@ from django.db import models
|
|||||||
# products/models.py
|
# products/models.py
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
class Pegs(models.Model):
|
|
||||||
|
class ReusableAutoField(models.PositiveIntegerField):
|
||||||
|
"""A django auto field that can reuse deleted primary keys"""
|
||||||
|
|
||||||
|
def get_next_available_id(self, model_cls, using=None):
|
||||||
|
"""
|
||||||
|
Returns the next available id for the given model class.
|
||||||
|
"""
|
||||||
|
all_ids = set(range(1, model_cls._default_manager.count()+1))
|
||||||
|
used_ids = set(model_cls._default_manager.all().values_list('pk', flat=True))
|
||||||
|
available_ids = all_ids - used_ids
|
||||||
|
|
||||||
|
if available_ids:
|
||||||
|
return min(available_ids)
|
||||||
|
|
||||||
|
if used_ids:
|
||||||
|
return max(used_ids) + 1
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def get_default(self):
|
||||||
|
return self.get_next_available_id(self.model)
|
||||||
|
|
||||||
|
|
||||||
|
class Peg(models.Model):
|
||||||
|
"""Represents a person getting pegged"""
|
||||||
|
|
||||||
|
peg_number = ReusableAutoField(primary_key=True, default=ReusableAutoField.get_default, editable=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{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
|
||||||
|
|
||||||
|
|
||||||
#class Scoreboard(models.Model):
|
#class Scoreboard(models.Model):
|
||||||
# class Status(models.IntegerChoices):
|
# class Status(models.IntegerChoices):
|
||||||
|
35
src/mainapp/templates/entities/bulk_pegging.html
Normal file
35
src/mainapp/templates/entities/bulk_pegging.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{% extends "admin/change_list.html" %}
|
||||||
|
|
||||||
|
{% block object-tools %}
|
||||||
|
<div class="bg-body pt-2 pb-3 d-flex justify-content-end">
|
||||||
|
<button class="btn btn-primary me-3" data-bs-toggle="modal" data-bs-target="#peggingModal">Add Many Pegs</button>
|
||||||
|
<form method="POST" action="/bulk-peg/">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="pegAmount" value="1" min="1" max="1" required="true">
|
||||||
|
<button type="submit" class="btn btn-secondary">Add One Peg</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal fade" tabindex="-1" id="peggingModal" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Bulk Add Pegs</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form method="POST" action="/bulk-peg/">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-group mb-3">
|
||||||
|
<label class="form-label" for="pegAmount">Number of Pegs</label>
|
||||||
|
<input type="number" class="form-control" id="pegAmount" name="pegAmount" min="1" max="9999" required="true">
|
||||||
|
</div>
|
||||||
|
<div class="d-flex">
|
||||||
|
<button type="submit" class="btn btn-success me-auto">Start Pegging Baby</button>
|
||||||
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal" aria-label="Close">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock object-tools %}
|
@ -6,4 +6,5 @@ urlpatterns = [
|
|||||||
path('results.html', views.results, name='results'),
|
path('results.html', views.results, name='results'),
|
||||||
path('scoreboard.html', views.scoreboard, name='scoreboard'),
|
path('scoreboard.html', views.scoreboard, name='scoreboard'),
|
||||||
path('teams.html', views.teams, name='teams'),
|
path('teams.html', views.teams, name='teams'),
|
||||||
|
path('bulk-peg/', views.bulk_create_pegs, name='bulk-peg')
|
||||||
]
|
]
|
@ -1,5 +1,7 @@
|
|||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
|
|
||||||
|
from .models import Peg
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
return render(request, 'index.html')
|
return render(request, 'index.html')
|
||||||
|
|
||||||
@ -10,4 +12,14 @@ def scoreboard(request):
|
|||||||
return render(request, 'scoreboard.html')
|
return render(request, 'scoreboard.html')
|
||||||
|
|
||||||
def teams(request):
|
def teams(request):
|
||||||
return render(request, 'teams.html')
|
return render(request, 'teams.html')
|
||||||
|
|
||||||
|
def bulk_create_pegs(request):
|
||||||
|
"""Bulk create pegs"""
|
||||||
|
|
||||||
|
number_of_pegs = request.POST.get("pegAmount")
|
||||||
|
for i in range(int(number_of_pegs)):
|
||||||
|
Peg.objects.create()
|
||||||
|
|
||||||
|
# return to previous page
|
||||||
|
return redirect(request.META.get('HTTP_REFERER'))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user