Skip to content

Commit

Permalink
Back the member modification view with a form.
Browse files Browse the repository at this point in the history
  • Loading branch information
colons committed Apr 13, 2024
1 parent c643be4 commit 8ed6b58
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions nkdsu/apps/vote/views/profiles.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from typing import Any, Optional

from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User as DjangoUser
from django.core.exceptions import ValidationError
from django.db.models import Q, QuerySet
from django.forms import ModelForm, TextInput
from django.forms import BooleanField, IntegerField, ModelForm, TextInput
from django.http import HttpRequest, HttpResponse, HttpResponseNotAllowed
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse, reverse_lazy
Expand Down Expand Up @@ -199,4 +200,31 @@ def get_context_data(self, **kwargs) -> dict[str, Any]:


class UserTrackListModifyMembersView(ModifyUserTrackList):
pass
fields = []

def get_form_class(self) -> type[ModelForm]:
form = super().get_form_class()
playlist = list(self.get_object().playlist())

return type(
'MembersForm',
(form,),
{
**{f'index_{t.pk}': IntegerField() for t in playlist},
**{f'remove_{t.pk}': BooleanField(required=False) for t in playlist},
},
)

def form_valid(self, form: ModelForm) -> HttpResponse:
raise RuntimeError(form.cleaned_data)

def form_invalid(self, form: ModelForm) -> HttpResponse:
messages.warning(
self.request,
(
str(form.errors)
if settings.DEBUG
else 'reordering invalid; perhaps the tracks in this list changed while you had the page loaded?'
),
)
return redirect(form.instance.get_absolute_url())

0 comments on commit 8ed6b58

Please sign in to comment.