diff --git a/apps/family/forms.py b/apps/family/forms.py new file mode 100644 index 00000000..63b47f48 --- /dev/null +++ b/apps/family/forms.py @@ -0,0 +1,21 @@ +# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from django import forms +from django.forms.widgets import NumberInput +from django.utils.translation import gettext_lazy as _ +from note_kfet.inputs import Autocomplete + +from .models import Challenge, FamilyMembership, User + + +class ChallengeUpdateForm(forms.ModelForm): + """ + To update a challenge + """ + class Meta: + model = Challenge + fields = ('name', 'description', 'points',) + widgets = { + "points": NumberInput() + } diff --git a/apps/family/templates/family/challenge_detail.html b/apps/family/templates/family/challenge_detail.html index 44addf57..23cb3f93 100644 --- a/apps/family/templates/family/challenge_detail.html +++ b/apps/family/templates/family/challenge_detail.html @@ -26,7 +26,11 @@ SPDX-License-Identifier: GPL-3.0-or-later {% trans "Return to the challenge list" %} - + {% if update %} + + {% trans "Update" %} + + {% endif %} {% endblock %} diff --git a/apps/family/templates/family/challenge_update.html b/apps/family/templates/family/challenge_update.html new file mode 100644 index 00000000..27c7bed2 --- /dev/null +++ b/apps/family/templates/family/challenge_update.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% comment %} +Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +SPDX-License-Identifier: GPL-3.0-or-later +{% endcomment %} +{% load i18n crispy_forms_tags %} + +{% block content %} +
+

+ {{ title }} +

+
+
+ {% csrf_token %} + {{ form | crispy }} + +
+
+
+{% endblock %} diff --git a/apps/family/views.py b/apps/family/views.py index d8072dbb..4b710681 100644 --- a/apps/family/views.py +++ b/apps/family/views.py @@ -1,15 +1,19 @@ # Copyright (C) 2018-2025 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later +from datetime import date + from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import DetailView, UpdateView from django.utils.translation import gettext_lazy as _ from django_tables2 import SingleTableView from permission.backends import PermissionBackend from permission.views import ProtectQuerysetMixin, ProtectedCreateView +from django.urls import reverse_lazy -from .models import Family, Challenge -from .tables import FamilyTable, ChallengeTable +from .models import Family, Challenge, FamilyMembership, User +from .tables import FamilyTable, ChallengeTable, FamilyMembershipTable +from .forms import ChallengeUpdateForm class FamilyCreateView(ProtectQuerysetMixin, ProtectedCreateView): @@ -68,6 +72,9 @@ class ChallengeCreateView(ProtectQuerysetMixin, ProtectedCreateView): description="Sample challenge", points=0, ) + + def get_success_url(self): + return reverse_lazy('family:challenge_list') class ChallengeListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): @@ -101,6 +108,7 @@ class ChallengeDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): return context + class ChallengeUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): """ Update the information of a challenge @@ -109,3 +117,8 @@ class ChallengeUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): context_object_name = "challenge" extra_context = {"title": _('Update challenge')} template_name = 'family/challenge_update.html' + form_class = ChallengeUpdateForm + + def get_success_url(self, **kwargs): + self.object.refresh_from_db() + return reverse_lazy('family:challenge_detail', kwargs={'pk': self.object.pk}) \ No newline at end of file