From 052026e300acdbd6c1cec7f746c7359f8d2e1cb8 Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Fri, 16 Jul 2021 10:29:53 +0200
Subject: [PATCH] automatically use CheckboxSelectMultiple for M2M

---
 basetheme_bootstrap/views.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/basetheme_bootstrap/views.py b/basetheme_bootstrap/views.py
index b645adb..e15b935 100644
--- a/basetheme_bootstrap/views.py
+++ b/basetheme_bootstrap/views.py
@@ -223,15 +223,19 @@ def account_detail(request):
     else:
         is_posted = request.method == 'POST'
         pref = klass.get_for_user(user=request.user)
+        widgets_dict = dict(
+            (f.name, widgets.CheckboxSelectMultiple()) for f in pref._meta.get_fields() if f.many_to_many)
         form_prefs = forms.modelform_factory(
             klass,
-            fields=list(klass.get_allowed_fields()),
+            fields=list(pref.get_allowed_fields()),
+            widgets=widgets_dict,
         )(instance=pref, data=request.POST if is_posted else None)
         if is_posted and form_prefs.is_valid():
             form_prefs.save()
             form_prefs = forms.modelform_factory(
                 klass,
-                fields=list(klass.get_allowed_fields()),
+                fields=list(pref.get_allowed_fields()),
+                widgets=widgets_dict,
             )(instance=klass.get_for_user(user=request.user))
         # dirty patch for time field (don't know why django doesn't express the correct type by default)
         for f in form_prefs.fields.values():
-- 
GitLab