diff --git a/sigi/apps/casas/admin.py b/sigi/apps/casas/admin.py index 9991e67..0c85ddd 100644 --- a/sigi/apps/casas/admin.py +++ b/sigi/apps/casas/admin.py @@ -1,5 +1,7 @@ +from pathlib import Path from typing import Any from django.db.models.query import QuerySet +from django.forms import ValidationError from django.http import HttpRequest from email_validator import validate_email, EmailNotValidError from django.db.models import F @@ -340,11 +342,15 @@ class OcorrenciaInline(admin.StackedInline): @mark_safe def get_anexos(self, obj): anexos = [ - f"
  • {a.descricao}
  • " + f'' + ' ' + f"{a.descricao or Path(a.arquivo.path).name}" for a in obj.anexo_set.all() ] if anexos: - return "" + return '
    ' + "".join(anexos) + "
    " else: return "Sem anexos" @@ -528,7 +534,10 @@ class OrgaoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin): try: servidor = Servidor.objects.get(user=request.user) except Servidor.DoesNotExist: - servidor = None + raise ValidationError( + _("Seu usuário não pode registrar ocorrênciaa"), + code="invalid_user", + ) if servidor is not None: instances = ocorrencia_formset.save(commit=False) for obj in instances: diff --git a/sigi/apps/casas/forms.py b/sigi/apps/casas/forms.py index 8c6ad46..ae89f49 100644 --- a/sigi/apps/casas/forms.py +++ b/sigi/apps/casas/forms.py @@ -123,13 +123,17 @@ class OcorrenciaInlineForm(forms.ModelForm): fields = "__all__" def save(self, commit=True): - instance = super().save(commit=False) + instance = super().save(commit=commit) + # Ocorrencia instance needs to have a value for field "id" before + # their relationships can be used. + if instance.id is None: + return instance arquivo = self.cleaned_data["anexo"] descricao = self.cleaned_data["descricao_anexo"] if arquivo: - anexo = Anexo(arquivo=arquivo, descricao=descricao) - instance.anexo_set.add(anexo, bulk=False) + anexo = Anexo( + ocorrencia=instance, arquivo=arquivo, descricao=descricao + ) + anexo.save() self.cleaned_data["anexo"] = None - if commit: - instance.save() return instance