fix error editing states

This commit is contained in:
Cayo Puigdefabregas 2025-01-30 12:24:17 +01:00
parent 75e8a683dd
commit 7fcc84a92b
2 changed files with 24 additions and 15 deletions

View file

@ -2,6 +2,7 @@ from django.views import View
from django.shortcuts import redirect, get_object_or_404 from django.shortcuts import redirect, get_object_or_404
from django.contrib import messages from django.contrib import messages
from action.forms import ChangeStateForm, AddNoteForm from action.forms import ChangeStateForm, AddNoteForm
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import DeleteView, CreateView, UpdateView, FormView from django.views.generic.edit import DeleteView, CreateView, UpdateView, FormView
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -9,7 +10,7 @@ from action.models import State, StateDefinition, Note, DeviceLog
from device.models import Device from device.models import Device
class ChangeStateView(FormView): class ChangeStateView(LoginRequiredMixin, FormView):
form_class = ChangeStateForm form_class = ChangeStateForm
def form_valid(self, form): def form_valid(self, form):
@ -42,7 +43,7 @@ class ChangeStateView(FormView):
return self.request.META.get('HTTP_REFERER') or reverse_lazy('device:details') return self.request.META.get('HTTP_REFERER') or reverse_lazy('device:details')
class AddNoteView(FormView): class AddNoteView(LoginRequiredMixin, FormView):
form_class = AddNoteForm form_class = AddNoteForm
def form_valid(self, form): def form_valid(self, form):
@ -73,7 +74,7 @@ class AddNoteView(FormView):
return self.request.META.get('HTTP_REFERER') or reverse_lazy('device:details') return self.request.META.get('HTTP_REFERER') or reverse_lazy('device:details')
class UpdateNoteView(UpdateView): class UpdateNoteView(LoginRequiredMixin, UpdateView):
model = Note model = Note
fields = ['description'] fields = ['description']
pk_url_kwarg = 'pk' pk_url_kwarg = 'pk'
@ -93,19 +94,19 @@ class UpdateNoteView(UpdateView):
) )
messages.success(self.request, "Note has been updated.") messages.success(self.request, "Note has been updated.")
return super().form_valid(form) return super().form_valid(form)
def form_invalid(self, form): def form_invalid(self, form):
new_description = form.cleaned_data.get('description', '').strip() new_description = form.cleaned_data.get('description', '').strip()
if not new_description: if not new_description:
messages.error(self.request, _("Note cannot be empty.")) messages.error(self.request, _("Note cannot be empty."))
super().form_invalid(form) super().form_invalid(form)
return redirect(self.get_success_url()) return redirect(self.get_success_url())
def get_success_url(self): def get_success_url(self):
return self.request.META.get('HTTP_REFERER', reverse_lazy('device:details')) return self.request.META.get('HTTP_REFERER', reverse_lazy('device:details'))
class DeleteNoteView(View): class DeleteNoteView(LoginRequiredMixin, View):
model = Note model = Note
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):

View file

@ -25,7 +25,7 @@ class AdminView(DashboardView):
response = super().get(*args, **kwargs) response = super().get(*args, **kwargs)
if not self.request.user.is_admin: if not self.request.user.is_admin:
raise Http403 raise Http403
return response return response
class PanelView(AdminView, TemplateView): class PanelView(AdminView, TemplateView):
@ -111,7 +111,7 @@ class EditUserView(AdminView, UpdateView):
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
return kwargs return kwargs
class InstitutionView(AdminView, UpdateView): class InstitutionView(AdminView, UpdateView):
template_name = "institution.html" template_name = "institution.html"
title = _("Edit institution") title = _("Edit institution")
@ -168,8 +168,9 @@ class AddStateDefinitionView(AdminView, StateDefinitionContextMixin, CreateView)
messages.error(self.request, _("State is already defined.")) messages.error(self.request, _("State is already defined."))
return self.form_invalid(form) return self.form_invalid(form)
def form_invalid(self, form): def form_invalid(self, form):
return super().form_invalid(form) super().form_invalid(form)
return redirect(self.success_url)
class DeleteStateDefinitionView(AdminView, StateDefinitionContextMixin, SuccessMessageMixin, DeleteView): class DeleteStateDefinitionView(AdminView, StateDefinitionContextMixin, SuccessMessageMixin, DeleteView):
@ -218,14 +219,21 @@ class UpdateStateDefinitionView(AdminView, UpdateView):
model = StateDefinition model = StateDefinition
template_name = 'states_panel.html' template_name = 'states_panel.html'
fields = ['state'] fields = ['state']
success_url = reverse_lazy('admin:states_panel')
pk_url_kwarg = 'pk' pk_url_kwarg = 'pk'
def get_queryset(self): def get_queryset(self):
return StateDefinition.objects.filter(institution=self.request.user.institution) return StateDefinition.objects.filter(institution=self.request.user.institution)
def get_success_url(self):
messages.success(self.request, _("State definition updated successfully."))
return reverse_lazy('admin:states_panel')
def form_valid(self, form): def form_valid(self, form):
return super().form_valid(form) try:
response = super().form_valid(form)
messages.success(self.request, _("State definition updated successfully."))
return response
except IntegrityError:
messages.error(self.request, _("State is already defined."))
return self.form_invalid(form)
def form_invalid(self, form):
super().form_invalid(form)
return redirect(self.get_success_url())