better lot url redirect and error messages

This commit is contained in:
Thomas Nahuel Rusiecki 2025-02-24 14:01:26 -03:00
parent 12b9be4276
commit 81cd13dae4
2 changed files with 46 additions and 7 deletions

View file

@ -37,6 +37,12 @@ class Lot(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
type = models.ForeignKey(LotTag, on_delete=models.CASCADE) type = models.ForeignKey(LotTag, on_delete=models.CASCADE)
class Meta:
constraints = [
models.UniqueConstraint(fields=['owner', 'name'], name='unique_institution_and_name')
]
def add(self, v): def add(self, v):
if DeviceLot.objects.filter(lot=self, device_id=v).exists(): if DeviceLot.objects.filter(lot=self, device_id=v).exists():
return return

View file

@ -16,11 +16,28 @@ from dashboard.mixins import DashboardView
from lot.models import Lot, LotTag, LotProperty from lot.models import Lot, LotTag, LotProperty
from lot.forms import LotsForm from lot.forms import LotsForm
class NewLotView(DashboardView, CreateView):
class LotSuccessUrlMixin():
success_url = reverse_lazy('dashboard:unassigned') #default_url
def get_success_url(self):
lot_group_id = LotTag.objects.only('id').get(
owner=self.object.owner,
name=self.object.type
).id
#null checking just in case
if not lot_group_id:
return self.success_url
return reverse_lazy('lot:tags', args=[lot_group_id])
class NewLotView(LotSuccessUrlMixin ,DashboardView, CreateView):
template_name = "new_lot.html" template_name = "new_lot.html"
title = _("New lot") title = _("New lot")
breadcrumb = "lot / New lot" breadcrumb = "lot / New lot"
success_url = reverse_lazy('dashboard:unassigned')
model = Lot model = Lot
fields = ( fields = (
"type", "type",
@ -43,6 +60,8 @@ class NewLotView(DashboardView, CreateView):
form.instance.owner = self.request.user.institution form.instance.owner = self.request.user.institution
form.instance.user = self.request.user form.instance.user = self.request.user
response = super().form_valid(form) response = super().form_valid(form)
messages.success(self.request, _("Lot created successfully."))
return response return response
except IntegrityError: except IntegrityError:
@ -51,12 +70,10 @@ class NewLotView(DashboardView, CreateView):
return response return response
class DeleteLotView(LotSuccessUrlMixin, DashboardView, DeleteView):
class DeleteLotView(DashboardView, DeleteView):
template_name = "delete_lot.html" template_name = "delete_lot.html"
title = _("Delete lot") title = _("Delete lot")
breadcrumb = "lot / Delete lot" breadcrumb = "lot / Delete lot"
success_url = reverse_lazy('dashboard:unassigned')
model = Lot model = Lot
fields = ( fields = (
"type", "type",
@ -68,14 +85,20 @@ class DeleteLotView(DashboardView, DeleteView):
def form_valid(self, form): def form_valid(self, form):
response = super().form_valid(form) response = super().form_valid(form)
messages.warning(self.request, _("Lot '{}' was successfully deleted.").format(self.object.name))
return response
def form_invalid(self, form):
response = super().form_invalid(form)
messages.error(self.request, _("Error deleting the lot."))
return response return response
class EditLotView(DashboardView, UpdateView): class EditLotView(LotSuccessUrlMixin, DashboardView, UpdateView):
template_name = "new_lot.html" template_name = "new_lot.html"
title = _("Edit lot") title = _("Edit lot")
breadcrumb = "Lot / Edit lot" breadcrumb = "Lot / Edit lot"
success_url = reverse_lazy('dashboard:unassigned')
model = Lot model = Lot
fields = ( fields = (
"type", "type",
@ -104,6 +127,16 @@ class EditLotView(DashboardView, UpdateView):
) )
return form return form
def form_valid(self, form):
response = super().form_valid(form)
messages.warning(self.request, _("Lot '{}' was successfully edited.").format(self.object.name))
return response
def form_invalid(self, form):
response = super().form_invalid(form)
messages.error(self.request, _("Error editing the lot."))
return response
class AddToLotView(DashboardView, FormView): class AddToLotView(DashboardView, FormView):
template_name = "list_lots.html" template_name = "list_lots.html"