From b16871d9255ba8ed616ac7b849e6acb4d85fa7dc Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <yohann.danello@gmail.com>
Date: Sat, 15 Aug 2020 23:03:49 +0200
Subject: [PATCH] Display a form error rather than a page error if a guest is
 already invited

---
 apps/activity/admin.py  | 2 ++
 apps/activity/forms.py  | 3 +--
 apps/activity/models.py | 2 +-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/apps/activity/admin.py b/apps/activity/admin.py
index 705ac206..4cf5925d 100644
--- a/apps/activity/admin.py
+++ b/apps/activity/admin.py
@@ -3,6 +3,7 @@
 
 from django.contrib import admin
 from note_kfet.admin import admin_site
+from .forms import GuestForm
 
 from .models import Activity, ActivityType, Entry, Guest
 
@@ -35,6 +36,7 @@ class GuestAdmin(admin.ModelAdmin):
     Admin customisation for Guest
     """
     list_display = ('last_name', 'first_name', 'activity', 'inviter')
+    form = GuestForm
 
 
 @admin.register(Entry, site=admin_site)
diff --git a/apps/activity/forms.py b/apps/activity/forms.py
index c05330ae..f5d98fb0 100644
--- a/apps/activity/forms.py
+++ b/apps/activity/forms.py
@@ -55,9 +55,8 @@ class GuestForm(forms.ModelForm):
             first_name__iexact=cleaned_data["first_name"],
             last_name__iexact=cleaned_data["last_name"],
             activity__date_start__gte=self.activity.date_start - one_year,
-            entry__isnull=False,
         )
-        if qs.count() >= 5:
+        if qs.filter(entry__isnull=False).count() >= 5:
             self.add_error("last_name", _("This person has been already invited 5 times this year."))
 
         qs = qs.filter(activity=self.activity)
diff --git a/apps/activity/models.py b/apps/activity/models.py
index 89a51d73..c4090f85 100644
--- a/apps/activity/models.py
+++ b/apps/activity/models.py
@@ -257,7 +257,7 @@ class Guest(models.Model):
                 last_name__iexact=self.last_name,
                 activity__date_start__gte=self.activity.date_start - one_year,
             )
-            if qs.count() >= 5:
+            if qs.filter(entry__isnull=False).count() >= 5:
                 raise ValidationError(_("This person has been already invited 5 times this year."))
 
             qs = qs.filter(activity=self.activity)
-- 
GitLab