From 8dc4a249868fe765475f9167332621a13d594f04 Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Sun, 12 Nov 2017 22:23:13 +0100
Subject: [PATCH] Fix admin interface

- replace TextAreaField by StringField for several Text columns
- add filter to replace empty string by None on optional Text and INET
  fields
---
 app/admin/views.py | 40 +++++++++++++++++++++++++++++++++++++++-
 app/factory.py     |  6 +++---
 2 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/app/admin/views.py b/app/admin/views.py
index 12fab59..27bb41a 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -60,9 +60,47 @@ class QRCodeAdmin(AdminModelView):
 
 class ItemAdmin(AdminModelView):
 
+    # Replace TextAreaField (default for Text) with StringField
+    form_overrides = {
+        'ics_id': fields.StringField,
+        'serial_number': fields.StringField,
+    }
+
     form_args = {
         'ics_id': {
             'label': 'ICS id',
-            'validators': [validators.Regexp(ICS_ID_RE, message='ICS id shall match [A-Z]{3}[0-9]{3}')]
+            'validators': [validators.Regexp(ICS_ID_RE, message='ICS id shall match [A-Z]{3}[0-9]{3}')],
+            'filters': [lambda x: x or None],
+        }
+    }
+
+
+class NetworkAdmin(AdminModelView):
+
+    # Replace TextAreaField (default for Text) with StringField
+    form_overrides = {
+        'label': fields.StringField,
+    }
+
+    form_args = {
+        'label': {
+            'filters': [lambda x: x or None],
+        },
+        'gateway': {
+            'filters': [lambda x: x or None],
+        },
+    }
+
+
+class HostAdmin(AdminModelView):
+
+    # Replace TextAreaField (default for Text) with StringField
+    form_overrides = {
+        'name': fields.StringField,
+    }
+
+    form_args = {
+        'name': {
+            'filters': [lambda x: x or None],
         }
     }
diff --git a/app/factory.py b/app/factory.py
index fde52fc..3e40240 100644
--- a/app/factory.py
+++ b/app/factory.py
@@ -14,7 +14,7 @@ from flask import Flask
 from whitenoise import WhiteNoise
 from . import settings, models
 from .extensions import db, migrate, login_manager, ldap_manager, bootstrap, admin, mail, jwt, toolbar
-from .admin.views import AdminModelView, ItemAdmin, UserAdmin, GroupAdmin, QRCodeAdmin
+from .admin.views import AdminModelView, ItemAdmin, UserAdmin, GroupAdmin, QRCodeAdmin, NetworkAdmin, HostAdmin
 from .main.views import bp as main
 from .users.views import bp as users
 from .api.main import bp as api
@@ -100,8 +100,8 @@ def create_app(config=None):
     admin.add_view(QRCodeAdmin(models.Location, db.session))
     admin.add_view(QRCodeAdmin(models.Status, db.session))
     admin.add_view(ItemAdmin(models.Item, db.session))
-    admin.add_view(AdminModelView(models.Network, db.session))
-    admin.add_view(AdminModelView(models.Host, db.session))
+    admin.add_view(NetworkAdmin(models.Network, db.session))
+    admin.add_view(HostAdmin(models.Host, db.session))
     admin.add_view(AdminModelView(models.Mac, db.session))
 
     app.register_blueprint(main)
-- 
GitLab