Skip to content

Commit

Permalink
updated migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonLovesDoggo committed Jan 3, 2024
1 parent 8295c29 commit 7233f28
Show file tree
Hide file tree
Showing 6 changed files with 134 additions and 62 deletions.
8 changes: 8 additions & 0 deletions core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ class CourseInline(admin.TabularInline):
extra = 0


class StaffMemberInline(admin.StackedInline):
model = models.StaffMember
can_delete = False
verbose_name_plural = "Staff Member Info"


class TermAdmin(admin.ModelAdmin):
inlines = [
CourseInline,
Expand Down Expand Up @@ -597,6 +603,7 @@ def save_model(self, request, obj, form, change):


class UserAdmin(admin.ModelAdmin):
inlines = (StaffMemberInline,)
list_display = ["username", "is_superuser", "is_staff", "is_teacher"]
list_filter = [
"is_superuser",
Expand Down Expand Up @@ -698,6 +705,7 @@ def content_object(self, obj):
admin.site.register(models.Tag, TagAdmin)
admin.site.register(models.Event, EventAdmin)
admin.site.register(models.Raffle, RaffleAdmin)
admin.site.register(models.StaffMember)

admin.site.unregister(FlatPage)
admin.site.register(FlatPage, CustomFlatPageAdmin)
Expand Down
2 changes: 0 additions & 2 deletions core/api/views/staff.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
def staff(request):
"""
Returns a list of all staff.
https://noi.nyiyui.ca/k/1063/5041#Get Staff
"""
return Response(
[
Expand Down
51 changes: 0 additions & 51 deletions core/migrations/0069_alter_user_options_user_staff_bio_and_more.py

This file was deleted.

101 changes: 101 additions & 0 deletions core/migrations/0069_staffmember_alter_user_options_and_more.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Generated by Django 5.0 on 2024-01-03 05:44

import core.utils.multiselectfield
import django.db.models.deletion
import django.db.models.functions.text
from django.conf import settings
from django.db import migrations, models, IntegrityError


def populate_bios(apps, schema_editor):
StaffMember = apps.get_model("core", "StaffMember")
User = apps.get_model("core", "User")

for position, user_ids in settings.METROPOLIS_STAFFS.items():
for user_id in user_ids:
try:
user = User.objects.get(pk=user_id)
bio = settings.METROPOLIS_STAFF_BIO.get(user_id, "")
staff_member, created = StaffMember.objects.get_or_create(user=user, bio=bio)
staff_member.position += [position]
staff_member.save()
except User.DoesNotExist:
print(f"User {user_id} does not exist")
except IntegrityError:
print(f"StaffMember for user {user_id} already exists")

def reversed_pop(apps, schema_editor):
raise RuntimeError("Cannot reverse this migration.")
# just uncomment the above line if you want to reverse this migration, but you will lose all staff bios

class Migration(migrations.Migration):
dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
(
"core",
"0058_fix_blogpost_featured_image_description_squashed_0068_remove_user_expo_notif_token_delete_recurrencerule",
),
]

operations = [
migrations.CreateModel(
name="StaffMember",
fields=[
(
"user",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
primary_key=True,
related_name="staff",
serialize=False,
to=settings.AUTH_USER_MODEL,
),
),
("bio", models.TextField()),
(
"position",
core.utils.multiselectfield.MultiSelectField(
max_length=200,
verbose_name=(
("PM", "Project Manager"),
("frontend", "Frontend Developer"),
("backend", "Backend Developer"),
("app", "App Developer"),
("graphics", "Graphic Designer"),
("content", "Content Creator"),
("doodle", "Doodle Developer"),
),
),
),
(
"years",
core.utils.multiselectfield.MultiSelectField(
max_length=200,
verbose_name=[
"2021-22",
"2022-23",
"2023-24",
"2024-25",
"2025-26",
],
),
),
],
options={
"verbose_name": "Staff Member",
"verbose_name_plural": "Staff Members",
},
),
migrations.AlterModelOptions(
name="user",
options={},
),
migrations.AddConstraint(
model_name="user",
constraint=models.UniqueConstraint(
django.db.models.functions.text.Lower("username"),
name="username-lower-check",
),
),
migrations.RunPython(populate_bios, reverse_code=reversed_pop),
]
29 changes: 25 additions & 4 deletions core/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ class User(AbstractUser):
help_text="JSON object with keys as tokens and values as null.",
# the length is not specified :( https://github.com/expo/expo/issues/1135#issuecomment-399622890
)
staff_bio = models.TextField(
blank=True, null=True, help_text="Staff bio for Metropolis staff"
)
# staff_position = MultiSelectField(settings.METROPOLIS_POSITIONS)

@property
def qltrs2(self):
Expand Down Expand Up @@ -105,3 +101,28 @@ class Meta:
constraints = [
models.UniqueConstraint(Lower("username"), name="username-lower-check")
]


class StaffMember(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
primary_key=True,
related_name="staff",
)
bio = models.TextField(blank=False, null=False)

position = MultiSelectField(settings.METROPOLIS_POSITIONS)

year_ranges = [
f"{year}-{str(year + 1)[-2:]}" for year in range(2021, timezone.now().year + 2) # you need to make a migration every 2nd year
]

years = MultiSelectField(year_ranges)

def __str__(self):
return f"{self.user.get_full_name()} ({self.user})"

class Meta:
verbose_name = "Staff Member"
verbose_name_plural = "Staff Members"
5 changes: 0 additions & 5 deletions core/utils/multiselectfield.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,6 @@ def __init__(self, *args, **kwargs):
self.min_choices = kwargs.pop("min_choices", None)
self.max_choices = kwargs.pop("max_choices", None)
super(MultiSelectField, self).__init__(*args, **kwargs)
self.validators = [
v
for v in self.validators
if not isinstance(v, validators.MaxLengthValidator)
] # remove existing MaxLengthValidator
self.max_length = get_max_length(self.choices, self.max_length)
if len(self.validators) == 0:
self.validators.append(MaxValueMultiFieldValidator(self.max_length))
Expand Down

0 comments on commit 7233f28

Please sign in to comment.