diff --git a/app/admin/views.py b/app/admin/views.py
index 465f8d64e14812c5671858a6ffa3bc31836f57a8..5f79881856098506625b71ca180959f7b3ac9d27 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -11,6 +11,8 @@ This module customizes the admin views.
 """
 from flask_admin.contrib import sqla
 from flask_login import current_user
+from ..models import Item
+from .. import utils
 
 
 class AdminModelView(sqla.ModelView):
@@ -19,9 +21,14 @@ class AdminModelView(sqla.ModelView):
         return current_user.is_authenticated and current_user.is_admin
 
 
-# Here is an example to customize an admin view
-# class ItemAdmin(AdminModelView):
-#     form_columns = ['serial_number', 'vendor', 'model']
-#
-#     def __init__(self, session):
-#         super().__init__(Item, session)
+class ItemAdmin(AdminModelView):
+
+    def __init__(self, session):
+        super().__init__(Item, session)
+
+    def on_model_change(self, form, model, is_created):
+        """Update the hash"""
+        # The hash is supposed to be computed in the __init__ method
+        # of the Item class but flask-admin doesn't pass any parameter
+        # when creating a class - we do it here instead
+        model.hash = utils.compute_hash(model.serial_number)
diff --git a/app/factory.py b/app/factory.py
index b2218cd308bf4e8bce0412342483b424f10f71b3..c08ff352664834bfbdf73dce54c1324e4d3eddb8 100644
--- a/app/factory.py
+++ b/app/factory.py
@@ -13,8 +13,8 @@ import sqlalchemy as sa
 from flask import Flask
 from . import settings
 from .extensions import db, migrate, login_manager, ldap_manager, bootstrap, admin, mail, jwt
-from .models import User, Role, Action, Vendor, Model, Location, Status, Item
-from .admin.views import AdminModelView
+from .models import User, Role, Action, Vendor, Model, Location, Status
+from .admin.views import AdminModelView, ItemAdmin
 from .main.views import bp as main
 from .users.views import bp as users
 from .api.items import bp as api
@@ -95,8 +95,7 @@ def create_app():
     admin.add_view(AdminModelView(Model, db.session))
     admin.add_view(AdminModelView(Location, db.session))
     admin.add_view(AdminModelView(Status, db.session))
-    admin.add_view(AdminModelView(Item, db.session))
-    # admin.add_view(ItemAdmin(db.session))
+    admin.add_view(ItemAdmin(db.session))
 
     app.register_blueprint(main)
     app.register_blueprint(users)
diff --git a/app/models.py b/app/models.py
index ece41683caa94befa10b596b97e5c582802ace27..1ed29250fc0d864dde070d34959dafd820885d5b 100644
--- a/app/models.py
+++ b/app/models.py
@@ -179,7 +179,7 @@ class Item(db.Model):
     status = db.relationship('Status', back_populates='items')
     children = db.relationship('Item', backref=db.backref('parent', remote_side=[id]))
 
-    def __init__(self, serial_number='', name=None, vendor=None, model=None, location=None, status=None):
+    def __init__(self, serial_number=None, name=None, vendor=None, model=None, location=None, status=None):
         self.serial_number = serial_number
         self.name = name
         self.vendor = vendor
diff --git a/app/utils.py b/app/utils.py
index 779a6f5621409e6dd06b552d00176e40d8e59d3b..40d9f16cd527ce12114defc8d2df303f098ccf85 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -39,6 +39,8 @@ class InventoryError(Exception):
 
 
 def compute_hash(string):
+    if string is None:
+        return None
     md5 = hashlib.md5(string.encode()).hexdigest()
     return uuid.UUID(md5)