Skip to content

Commit 0fea7ff

Browse files
authored
Merge pull request #43 from codersforcauses/issue-14-Create_registration_form_backend
Issue 14 create model for registrant details
2 parents 59339fb + 0e626b1 commit 0fea7ff

File tree

3 files changed

+196
-2
lines changed

3 files changed

+196
-2
lines changed

server/event_registration/admin.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from django.contrib import admin
22
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
3-
from .models import User
4-
from .models import Registration
3+
from .models import User, Registration, RegistrantDetail
54

65

76
@admin.register(User)
@@ -28,3 +27,6 @@ class RegistrationAdmin(admin.ModelAdmin):
2827
list_display = ("id", "user", "status", "created_at")
2928
list_filter = ("status",)
3029
search_fields = ("user__email",)
30+
31+
32+
admin.site.register(RegistrantDetail)
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Generated by Django 5.1.10 on 2025-07-11 05:54
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("event_registration", "0003_alter_registration_age_group"),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name="RegistrantDetail",
16+
fields=[
17+
(
18+
"id",
19+
models.BigAutoField(
20+
auto_created=True,
21+
primary_key=True,
22+
serialize=False,
23+
verbose_name="ID",
24+
),
25+
),
26+
("is_user", models.BooleanField(default=False)),
27+
("first_name", models.CharField(blank=True, max_length=100)),
28+
("middle_name", models.CharField(blank=True, max_length=100)),
29+
("last_name", models.CharField(blank=True, max_length=100)),
30+
(
31+
"gender",
32+
models.CharField(
33+
blank=True,
34+
choices=[("M", "Male"), ("F", "Female"), ("O", "Other")],
35+
default="O",
36+
max_length=1,
37+
),
38+
),
39+
("date_of_birth", models.DateField(blank=True)),
40+
("email", models.EmailField(blank=True, max_length=254)),
41+
("address_line1", models.CharField(blank=True, max_length=100)),
42+
("address_line2", models.CharField(blank=True, max_length=100)),
43+
("state", models.CharField(blank=True, max_length=50)),
44+
("postcode", models.CharField(blank=True, max_length=10)),
45+
("country", models.CharField(blank=True, max_length=100)),
46+
("has_travel_insurance", models.BooleanField(blank=True)),
47+
("repatriation_details", models.TextField(blank=True)),
48+
("day_phone", models.CharField(blank=True, max_length=20)),
49+
("cell_phone", models.CharField(blank=True, max_length=20)),
50+
(
51+
"aboriginal_torres_strait_islander",
52+
models.CharField(
53+
blank=True,
54+
choices=[
55+
("A", "Aboriginal"),
56+
("T", "Torres Strait Islander"),
57+
("B", "Aboriginal and Torres Strait Islander"),
58+
("N", "Neither"),
59+
],
60+
max_length=1,
61+
),
62+
),
63+
("country_of_birth", models.CharField(blank=True, max_length=50)),
64+
("country_of_birth_other", models.CharField(blank=True, max_length=50)),
65+
("speaks_english", models.BooleanField(blank=True)),
66+
("other_language", models.CharField(blank=True, max_length=50)),
67+
(
68+
"emergency_contact_name",
69+
models.CharField(blank=True, max_length=100),
70+
),
71+
(
72+
"emergency_contact_phone",
73+
models.CharField(blank=True, max_length=100),
74+
),
75+
(
76+
"secondary_emergency_contact_name",
77+
models.CharField(blank=True, max_length=100),
78+
),
79+
(
80+
"secondary_emergency_contact_phone",
81+
models.CharField(blank=True, max_length=100),
82+
),
83+
("representing_state", models.CharField(blank=True, max_length=50)),
84+
("representing_country", models.CharField(blank=True, max_length=100)),
85+
("supporter_info", models.CharField(blank=True, max_length=100)),
86+
("transplant_types", models.CharField(blank=True, max_length=100)),
87+
("other_transplant_type", models.CharField(blank=True, max_length=100)),
88+
(
89+
"awaiting_transplant_type",
90+
models.CharField(blank=True, max_length=100),
91+
),
92+
("transplant_date", models.DateField(blank=True)),
93+
("ongoing_care_hospital", models.CharField(blank=True, max_length=100)),
94+
("has_pre_existing_conditions", models.BooleanField(blank=True)),
95+
("pre_existing_conditions_details", models.TextField(blank=True)),
96+
("requires_wheelchair_assistance", models.BooleanField(blank=True)),
97+
("has_dietary_requirements", models.BooleanField(blank=True)),
98+
("dietary_requirements_details", models.TextField(blank=True)),
99+
("wants_to_volunteer", models.BooleanField(blank=True)),
100+
("wants_junior_activities_info", models.BooleanField(blank=True)),
101+
("created_at", models.DateTimeField(auto_now_add=True)),
102+
("updated_at", models.DateTimeField(auto_now=True)),
103+
(
104+
"registration",
105+
models.OneToOneField(
106+
on_delete=django.db.models.deletion.CASCADE,
107+
related_name="registrant_details",
108+
to="event_registration.registration",
109+
),
110+
),
111+
],
112+
),
113+
]

server/event_registration/models.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
33
from django.utils import timezone
4+
from django.utils.translation import gettext_lazy as _
45
import uuid
56

67

@@ -82,3 +83,81 @@ class Registration(models.Model):
8283

8384
def __str__(self):
8485
return f"Registration {self.id} ({self.status})"
86+
87+
88+
class RegistrantDetail(models.Model):
89+
registration = models.OneToOneField(Registration, on_delete=models.CASCADE, related_name='registrant_details')
90+
is_user = models.BooleanField(default=False)
91+
92+
# Peronsal data
93+
first_name = models.CharField(max_length=100, blank=True)
94+
middle_name = models.CharField(max_length=100, blank=True)
95+
last_name = models.CharField(max_length=100, blank=True)
96+
97+
class Gender(models.TextChoices):
98+
MALE = 'M', _("Male")
99+
FEMALE = 'F', _('Female')
100+
OTHER = 'O', _('Other')
101+
gender = models.CharField(max_length=1, choices=Gender.choices, blank=True, default='O')
102+
date_of_birth = models.DateField(blank=True, null=True)
103+
email = models.EmailField(blank=True)
104+
105+
# Address
106+
address_line1 = models.CharField(max_length=100, blank=True)
107+
address_line2 = models.CharField(max_length=100, blank=True)
108+
state = models.CharField(max_length=50, blank=True)
109+
postcode = models.CharField(max_length=10, blank=True)
110+
country = models.CharField(max_length=100, blank=True)
111+
112+
# Travel
113+
has_travel_insurance = models.BooleanField(blank=True, default=False)
114+
repatriation_details = models.TextField(blank=True)
115+
116+
# Phone
117+
day_phone = models.CharField(max_length=20, blank=True)
118+
cell_phone = models.CharField(max_length=20, blank=True)
119+
120+
# Identity
121+
class Heritage(models.TextChoices):
122+
ABORIGINAL = 'A', _('Aboriginal')
123+
TORRES_STRAIT = 'T', _('Torres Strait Islander')
124+
BOTH = 'B', _('Aboriginal and Torres Strait Islander')
125+
NEITHER = 'N', _('Neither')
126+
aboriginal_torres_strait_islander = models.CharField(max_length=1, choices=Heritage.choices, blank=True)
127+
country_of_birth = models.CharField(max_length=50, blank=True)
128+
country_of_birth_other = models.CharField(max_length=50, blank=True)
129+
speaks_english = models.BooleanField(blank=True, default=False)
130+
other_language = models.CharField(max_length=50, blank=True)
131+
132+
# Emergency
133+
emergency_contact_name = models.CharField(max_length=100, blank=True)
134+
emergency_contact_phone = models.CharField(max_length=100, blank=True)
135+
secondary_emergency_contact_name = models.CharField(max_length=100, blank=True)
136+
secondary_emergency_contact_phone = models.CharField(max_length=100, blank=True)
137+
138+
# Competition
139+
representing_state = models.CharField(max_length=50, blank=True)
140+
representing_country = models.CharField(max_length=100, blank=True)
141+
supporter_info = models.CharField(max_length=100, blank=True)
142+
143+
# Medical
144+
transplant_types = models.CharField(max_length=100, blank=True)
145+
other_transplant_type = models.CharField(max_length=100, blank=True)
146+
awaiting_transplant_type = models.CharField(max_length=100, blank=True)
147+
transplant_date = models.DateField(blank=True, null=True)
148+
ongoing_care_hospital = models.CharField(max_length=100, blank=True)
149+
has_pre_existing_conditions = models.BooleanField(blank=True, default=False)
150+
pre_existing_conditions_details = models.TextField(blank=True)
151+
requires_wheelchair_assistance = models.BooleanField(blank=True, default=False)
152+
has_dietary_requirements = models.BooleanField(blank=True, default=False)
153+
dietary_requirements_details = models.TextField(blank=True)
154+
155+
# Preferences
156+
wants_to_volunteer = models.BooleanField(blank=True, default=False)
157+
wants_junior_activities_info = models.BooleanField(blank=True, default=False)
158+
159+
created_at = models.DateTimeField(auto_now_add=True)
160+
updated_at = models.DateTimeField(auto_now=True)
161+
162+
def __str__(self):
163+
return f"Registrant Detail #{self.id}"

0 commit comments

Comments
 (0)