added pegging baby

This commit is contained in:
Corban-Lee 2023-01-26 10:20:49 +00:00
parent 5e38f95b91
commit e74db50bdd
7 changed files with 128 additions and 4 deletions

5
.gitignore vendored
View File

@ -2,4 +2,7 @@
venv
venv/
pyvenv.cfg
*.pyc
*.pyc
venv/pyvenv.cfg
src/db.sqlite3
*.sqlite3

View File

@ -1,3 +1,16 @@
"""Admin models for the mainapp app."""
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",)

View 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)),
],
),
]

View File

@ -3,8 +3,47 @@ from django.db import models
# products/models.py
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 Status(models.IntegerChoices):

View 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 %}

View File

@ -6,4 +6,5 @@ urlpatterns = [
path('results.html', views.results, name='results'),
path('scoreboard.html', views.scoreboard, name='scoreboard'),
path('teams.html', views.teams, name='teams'),
path('bulk-peg/', views.bulk_create_pegs, name='bulk-peg')
]

View File

@ -1,5 +1,7 @@
from django.shortcuts import render, redirect
from .models import Peg
def index(request):
return render(request, 'index.html')
@ -10,4 +12,14 @@ def scoreboard(request):
return render(request, 'scoreboard.html')
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'))