Skip to content

Commit 826d2ce

Browse files
committed
tickets app, tickets models, registered the models in admin
1 parent 64d5980 commit 826d2ce

File tree

13 files changed

+279
-0
lines changed

13 files changed

+279
-0
lines changed

core/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"django.contrib.sessions",
3838
"django.contrib.messages",
3939
"django.contrib.staticfiles",
40+
"tickets.apps.TicketsConfig",
4041
]
4142

4243
MIDDLEWARE = [

requirements.txt

24 Bytes
Binary file not shown.

tickets/__init__.py

Whitespace-only changes.

tickets/admin.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from django.contrib import admin
2+
from tickets.models import Venue, ConcertCategory, Concert, Ticket
3+
4+
5+
class VenueAdmin(admin.ModelAdmin):
6+
pass
7+
8+
9+
class ConcertCategoryAdmin(admin.ModelAdmin):
10+
pass
11+
12+
13+
class ConcertAdmin(admin.ModelAdmin):
14+
pass
15+
16+
17+
class TicketAdmin(admin.ModelAdmin):
18+
pass
19+
20+
21+
admin.site.register(Venue, VenueAdmin)
22+
admin.site.register(ConcertCategory, ConcertCategoryAdmin)
23+
admin.site.register(Concert, ConcertAdmin)
24+
admin.site.register(Ticket, TicketAdmin)

tickets/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class TicketsConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "tickets"

tickets/management/__init__.py

Whitespace-only changes.

tickets/management/commands/__init__.py

Whitespace-only changes.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import random
2+
from datetime import datetime, timedelta
3+
4+
import pytz
5+
from django.core.management.base import BaseCommand
6+
7+
from tickets.models import Venue, ConcertCategory, Concert, Ticket
8+
9+
10+
class Command(BaseCommand):
11+
help = "Populates the database with random generated data."
12+
13+
def handle(self, *args, **options):
14+
# populate the database with venues
15+
venues = [
16+
Venue.objects.get_or_create(name="The O2 Arena", address="Peninsula Square, London SE10 0DX, United Kingdom", capacity=20000),
17+
Venue.objects.get_or_create(name="Arena of Nîmes", address="Boulevard des Arènes, 30000 Nîmes, France", capacity=17000),
18+
Venue.objects.get_or_create(name="Red Rocks Amphitheatre", address="18300 W Alameda, Morrison, CO, United States", capacity=9525),
19+
Venue.objects.get_or_create(name="Dalhalla Amphitheatre", address="Dalhalla, 790 90 Rättvik, Sweden", capacity=4000),
20+
Venue.objects.get_or_create(name="The Fillmore", address="1805 Geary Blvd, San Francisco, CA, United States", capacity=1250),
21+
]
22+
23+
# populate the database with categories
24+
categories = ["Rock", "Pop", "Metal", "Hip Hop", "Jazz"]
25+
for category in categories:
26+
ConcertCategory.objects.get_or_create(name=category)
27+
28+
# populate the database with concerts
29+
concert_prefix = ["Underground", "Midnight", "Late Night", "Secret", "", "", "", "", "", "", "", "", "", ""]
30+
concert_suffix = ["Party", "Rave", "Concert", "Gig", "Revolution", "Jam", "Tour"]
31+
for i in range(10):
32+
venue = random.choice(venues)[0]
33+
category = ConcertCategory.objects.order_by("?").first()
34+
concert = Concert.objects.create(
35+
name=f"{random.choice(concert_prefix)} {category.name} {random.choice(concert_suffix)}",
36+
description="",
37+
venue=venue,
38+
starts_at=datetime.now(pytz.utc) + timedelta(days=random.randint(1, 365)),
39+
price=random.randint(10, 100)
40+
)
41+
concert.categories.add(category)
42+
concert.save()
43+
44+
# populate the database with ticket purchases
45+
names = ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Thomas", "Charles"]
46+
surname = ["Smith", "Jones", "Taylor", "Brown", "Williams", "Wilson", "Johnson", "Davies", "Patel", "Wright"]
47+
for i in range(200):
48+
concert = Concert.objects.order_by("?").first()
49+
Ticket.objects.create(
50+
concert=concert,
51+
customer_full_name=f"{random.choice(names)} {random.choice(surname)}",
52+
payment_method=random.choice(["CC", "DC", "ET", "BC"]),
53+
paid_at=datetime.now(pytz.utc) - timedelta(days=random.randint(1, 365)),
54+
is_active=random.choice([True, False])
55+
)
56+
57+
self.stdout.write(self.style.SUCCESS("Successfully populated the database."))

tickets/migrations/0001_initial.py

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Generated by Django 4.2.4 on 2023-08-14 12:48
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
initial = True
9+
10+
dependencies = []
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name="Concert",
15+
fields=[
16+
(
17+
"id",
18+
models.BigAutoField(
19+
auto_created=True,
20+
primary_key=True,
21+
serialize=False,
22+
verbose_name="ID",
23+
),
24+
),
25+
("name", models.CharField(max_length=64)),
26+
(
27+
"description",
28+
models.TextField(blank=True, max_length=256, null=True),
29+
),
30+
("starts_at", models.DateTimeField()),
31+
("price", models.DecimalField(decimal_places=2, max_digits=6)),
32+
("tickets_left", models.IntegerField(default=0)),
33+
],
34+
),
35+
migrations.CreateModel(
36+
name="ConcertCategory",
37+
fields=[
38+
(
39+
"id",
40+
models.BigAutoField(
41+
auto_created=True,
42+
primary_key=True,
43+
serialize=False,
44+
verbose_name="ID",
45+
),
46+
),
47+
("name", models.CharField(max_length=64)),
48+
(
49+
"description",
50+
models.TextField(blank=True, max_length=256, null=True),
51+
),
52+
],
53+
),
54+
migrations.CreateModel(
55+
name="Venue",
56+
fields=[
57+
(
58+
"id",
59+
models.BigAutoField(
60+
auto_created=True,
61+
primary_key=True,
62+
serialize=False,
63+
verbose_name="ID",
64+
),
65+
),
66+
("name", models.CharField(max_length=64)),
67+
(
68+
"description",
69+
models.TextField(blank=True, max_length=256, null=True),
70+
),
71+
("address", models.CharField(max_length=256, unique=True)),
72+
("capacity", models.PositiveIntegerField()),
73+
],
74+
),
75+
migrations.CreateModel(
76+
name="Ticket",
77+
fields=[
78+
(
79+
"id",
80+
models.BigAutoField(
81+
auto_created=True,
82+
primary_key=True,
83+
serialize=False,
84+
verbose_name="ID",
85+
),
86+
),
87+
("customer_full_name", models.CharField(max_length=64)),
88+
(
89+
"payment_method",
90+
models.CharField(
91+
choices=[
92+
("CC", "Credit card"),
93+
("DC", "Debit card"),
94+
("ET", "Ethereum"),
95+
("BC", "Bitcoin"),
96+
],
97+
default="CC",
98+
max_length=2,
99+
),
100+
),
101+
("paid_at", models.DateTimeField(auto_now_add=True)),
102+
("is_active", models.BooleanField(default=True)),
103+
(
104+
"concert",
105+
models.ForeignKey(
106+
on_delete=django.db.models.deletion.CASCADE,
107+
to="tickets.concert",
108+
),
109+
),
110+
],
111+
),
112+
migrations.AddField(
113+
model_name="concert",
114+
name="categories",
115+
field=models.ManyToManyField(to="tickets.concertcategory"),
116+
),
117+
migrations.AddField(
118+
model_name="concert",
119+
name="venue",
120+
field=models.ForeignKey(
121+
null=True,
122+
on_delete=django.db.models.deletion.SET_NULL,
123+
to="tickets.venue",
124+
),
125+
),
126+
]

tickets/migrations/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)