added pegging baby
This commit is contained in:
parent
5e38f95b91
commit
e74db50bdd
5
.gitignore
vendored
5
.gitignore
vendored
@ -2,4 +2,7 @@
|
||||
venv
|
||||
venv/
|
||||
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
|
||||
|
||||
# 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
|
||||
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):
|
||||
|
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('scoreboard.html', views.scoreboard, name='scoreboard'),
|
||||
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 .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'))
|
||||
|
Loading…
x
Reference in New Issue
Block a user